PyQt5學習筆記---組件---菜單欄、工具欄、狀態欄

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_())

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章