PyQt5学习笔记---组件---菜单栏、工具栏、状态栏

本文介绍PyQt5中QMenu、QMenuBar、QToolBar和QStatusBar的使用方法,包括创建菜单、工具栏、状态栏及打印功能。通过实例演示如何添加菜单项、操作按钮、快捷键和状态信息。

QMenu:该类提供了一个可添加菜单栏的控件,也可用于创建上下文菜单和弹出菜单。每个QMenu对象可以包含一个或多个QAction对象或者级联的QMenu对象。

创建一个弹出窗口,createPopupMenu()函数,menuBar()函数用于返回主窗口的QMenuBar对象

addMenu()函数可以将菜单添加到菜单栏。addAction()函数可以在菜单中添加操作。

常用方法

menuBar()

返回主窗口的QMenuBar对象

addMenu()

在菜单栏添加一个新的QMenu对象

addAction()

向QMenu控件中添加一个操作按钮,包含文本、图案

setEnable()

将操作按钮状态设置为启用、禁用

addSeperator()

在菜单中添加一条分割线

clear()

删除菜单/菜单栏的内容

setShortcut()

将快捷键关联到按钮

setText()

设置菜单项文本

setTitle()

设置QMenu控件标题

text()

返回与QAction对象关联的文本

title()

返回QMenu控件标题

#QMenuBar菜单栏实例
# -*- coding: utf-8 -*-
import sys,math,os
from PyQt5 import QtCore
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class MenuDemo(QMainWindow):
    def __init__(self,parent=None):
        super(MenuDemo, self).__init__(parent)

        layout=QHBoxLayout()
        bar=self.menuBar()          #创建一个菜单栏

        file=bar.addMenu("File")    #菜单栏中添加一个菜单功能File
        file.addAction("New")       #File功能中添加一个Action动作 名称为New

        save=QAction("Save",self)   #创建一个Action动作 名称为Save
        save.setShortcut("Ctrl+S")  #为该动作添加一个快捷键 ctrl + s
        file.addAction(save)        #File功能中添加一个名称为Save 的 Action动作,即上述对象

        edit=file.addMenu("Edit")   #File功能中添加一个名称为 Edit 的 菜单
        edit.addAction("copy")      #为Edit添加两个action动作 copy paste
        edit.addAction("paste")

        quit=QAction("Quit",self)   #File功能中添加一个名称为Quit 的 Action动作
        file.addAction(quit)

        file.triggered[QAction].connect(self.processtrigger)

        self.setLayout(layout)
        self.setWindowTitle("menu 例子")

    def processtrigger(self,q):
        print(q.txt()+" is triggered")

if __name__=="__main__":
    app=QApplication(sys.argv)
    demo=MenuDemo()
    demo.show()
    sys.exit(app.exec_())

QToolBar:该控件由文本按钮、图标或其他小按钮组成的可移动面板,一般位于菜单栏下方

常用方法

addAction()

添加具有文本和图标的工具按钮

addSeperator()

分组显示工具按钮

addWidget()

添加工具栏中按钮以外的控件

addToolBar()

使用QMainWindow类的方法添加一个新的工具栏

setMoveable()

工具栏变得可移动

setOrientation()

工具栏的方向设置为Qt.Horizontal 或 Qt.Vertical

#QToolBar菜单栏实例
# -*- coding: utf-8 -*-
import sys,math,os
from PyQt5 import QtCore
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class ToolParDemo(QMainWindow):
    def __init__(self):
        super(ToolParDemo, self).__init__()

        self.setWindowTitle("toolbar例子")
        self.resize(300,200)

        layout=QVBoxLayout()
        tb=self.addToolBar("File")          #创建一个ToolBar
        new=QAction(QIcon("../images/new.png"),"new",self)   #创建一个Action
        tb.addAction(new)                    #为ToolBar添加一个Action

        open=QAction(QIcon("../images/open.png"),"open",self)
        tb.addAction(open)

        save=QAction(QIcon("../images/save.png"),"save",self)
        tb.addAction(save)

        tb.actionTriggered[QAction].connect(self.toolbtnpressed)
        self.setLayout(layout)

    def toolbtnpressed(self,a):
        print("pressed tool button is",a.text())

if __name__=="__main__":
    app=QApplication(sys.argv)
    demo=ToolParDemo()
    demo.show()
    sys.exit(app.exec_())

QStatusBar:该控件为MainWindow对象在底部留有的一个水平线,叫做状态栏,用于显示永久的或临时的状态信息

常用方法

addWidget()

在状态添加给定的窗口小控件

addPermancentWidget()

在状态栏中永久添加给指定的窗口小控件

showMessage()

在状态栏显示一条临时信息指定时间间隔

clearMessage()

删除正在显示的临时信息

removeWidget()

从状态栏删除指定控件

#QStatusBar状态栏实例
# -*- coding: utf-8 -*-
import sys,math,os
from PyQt5 import QtCore
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class StatusDemo(QMainWindow):
    def __init__(self):
        super(StatusDemo, self).__init__()
        bar=self.menuBar()
        file=bar.addMenu("File")
        file.addAction("show")

        file.triggered[QAction].connect(self.processTrigger)
        self.setCentralWidget(QTextEdit())
        self.statusBar=QStatusBar()
        self.setWindowTitle("QStatusBar 例子")
        self.setStatusBar(self.statusBar)

    def processTrigger(self,q):
        if (q.text() == "show"):
            self.statusBar.showMessage(q.text()+"菜单选项被点击",5000)

if __name__=="__main__":
    app=QApplication(sys.argv)
    demo=StatusDemo()
    demo.show()
    sys.exit(app.exec_())

  • QPrinter:该控件是打印图像,图像软件处理中的一个常用功能。本质上是一个QPaintDevice设备
#QPrinter打印图像实例
# -*- coding: utf-8 -*-
import sys,math,os
from PyQt5 import QtCore
from PyQt5.QtCore import *
from PyQt5.QtPrintSupport import QPrinter,QPrintDialog
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setWindowTitle(self.tr("打印图像"))
        self.imageLabel=QLabel()
        self.imageLabel.setSizePolicy(QSizePolicy.Ignored,QSizePolicy.Ignored)
        self.setCentralWidget(self.imageLabel)

        self.image=QImage()
        self.createActions()
        self.CreateMenus()
        self.CreateToolBars()
        ret=self.image.load("../images/screen.jpg")
        if ret:
            self.imageLabel.setPixmap(QPixmap.fromImage(self.image))
            self.resize(self.image.width(),self.image.height())

    def CreateMenus(self):
        PrintMenu=self.menuBar().addMenu(self.tr("打印"))  #在QMainWindow中的菜单栏添加一个打印菜单,
        PrintMenu.addAction(self.PrintAction)               #为菜单添加功能Action

    def createActions(self):
        self.PrintAction=QAction(QIcon("../images/printer.jpg"),self.tr("打印"),self) #为Action设置图像,
        self.PrintAction.setShortcut("Ctrl+P")                      #为Action设置快捷键
        self.PrintAction.setStatusTip(self.tr("打印"))                #为Action设置状态提示,鼠标放在图标上显示提示“打印”
        self.PrintAction.triggered.connect(self.slotPrint)

    def CreateToolBars(self):
        fileToolBar=self.addToolBar("Print")        #添加一个状态栏 Print
        fileToolBar.addAction(self.PrintAction)     #为状态栏添加Action

    def slotPrint(self):
        printer=QPrinter()
        printDialog=QPrintDialog(printer,self)
        if printDialog.exec_():
            painter=QPainter(printer,self)
            rect=painter.viewport()
            size=self.image.size()
            size.scale(rect.size(),Qt.KeepAspectRatio)
            painter.setViewport(rect.x(),rect.y(),size.width(),size.height())
            painter.setWindow(self.image.rect())
            painter.drawImage(0,0,self.image)

if __name__=="__main__":
    app=QApplication(sys.argv)
    demo=MainWindow()
    demo.show()
    sys.exit(app.exec_())

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值