1. 程式人生 > >QT學習之菜單欄與工具欄

QT學習之菜單欄與工具欄

沒有 app title div ica text .exe 信息 nbsp

QT學習之菜單欄與工具欄

目錄

簡單菜單欄
多級菜單欄
上下菜單欄
工具欄

簡單菜單欄

程序示例

from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, qApp
from PyQt5.QtGui import QIcon
import sys
class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        self.InitUI()

    def InitUI(self):
        self.statusBar().showMessage(‘準備就緒‘)
        self.setGeometry(300,300,400,300)
        self.setWindowTitle(‘簡單菜單欄‘)
        exitAct = QAction(QIcon(‘exit.png‘), ‘退出(&E)‘, self)
        exitAct.setShortcut(‘Ctrl+Q‘)
        exitAct.setStatusTip(‘退出程序‘)
        exitAct.triggered.connect(qApp.quit)
        menubar = self.menuBar()
        fileMenu = menubar.addMenu(‘文件(&F)‘)
        fileMenu.addAction(exitAct)

        self.show()
if __name__ == ‘__main__‘:
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

  

代碼解析

設置靜態狀態欄信息
self.statusBar().showMessage(‘準備就緒‘)


QAction是使用菜單欄,工具欄或自定義鍵盤快捷方式執行操作的抽象。我們創建一個具有特定圖標和“退出”標簽的動作。
exitAct = QAction(QIcon(‘exit.png‘), ‘退出(&E)‘, self)


為此操作定義了快捷方式
exitAct.setShortcut(‘Ctrl+Q‘)


當我們將鼠標指針懸停在菜單項上時,“退出程序”會顯示在狀態欄中。
exitAct.setStatusTip(‘退出程序‘)


當我們選擇這個特定的動作時,發出觸發信號。 信號連接到QApplication小部件的quit()方法。 這終止了應用程序。
exitAct.triggered.connect(qApp.quit)

menuBar()方法創建一個菜單欄。
addMenu()創建文件菜單,
addAction()添加操作

menubar = self.menuBar()
fileMenu = menubar.addMenu(‘文件(&F)‘)
fileMenu.addAction(exitAct)


上面的代碼中我們在退出、文件後面都增加了“&”這個符號,增加這個符號後,當我們按住“Alt+F”的時候就能快速打開文件這個菜單,同理按住“Alt+E”的時候就能退出了。

演示結果

技術分享圖片

多級菜單欄

程序示例

from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, qApp, QMenu
from PyQt5.QtGui import QIcon
import sys
class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        self.InitUI()
    def InitUI(self):
        self.statusBar().showMessage(‘準備就緒‘)

        self.setGeometry(300,300,400,300)
        self.setWindowTitle(‘多級菜單‘)


        exitAct = QAction(QIcon(‘exit.png‘), ‘退出(&E)‘, self)
        exitAct.setShortcut(‘Ctrl+Q‘)
        exitAct.setStatusTip(‘退出程序‘)
        exitAct.triggered.connect(qApp.quit)



        saveMenu = QMenu(‘保存方式(&S)‘, self)
        saveAct = QAction(QIcon(‘save.png‘),‘保存...‘, self)
        saveAct.setShortcut(‘Ctrl+S‘)
        saveAct.setStatusTip(‘保存文件‘)

        saveasAct = QAction(QIcon(‘saveas.png‘),‘另存為...(&O)‘, self)
        saveasAct.setStatusTip(‘文件另存為‘)

        saveMenu.addAction(saveAct)
        saveMenu.addAction(saveasAct)


        newAct = QAction(QIcon(‘new.png‘),‘新建(&N)‘,self)
        newAct.setShortcut(‘Ctrl+N‘)


        menubar = self.menuBar()
        fileMenu = menubar.addMenu(‘文件(&F)‘)
        fileMenu.addAction(newAct)
        fileMenu.addMenu(saveMenu)
        fileMenu.addSeparator()
        fileMenu.addAction(exitAct)

        self.show()
if __name__ == ‘__main__‘:
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

  

代碼解析

創建退出菜單
exitAct = QAction(QIcon(‘exit.png‘), ‘退出(&E)‘, self)
exitAct.setShortcut(‘Ctrl+Q‘)
exitAct.setStatusTip(‘退出程序‘)
exitAct.triggered.connect(qApp.quit)


使用QMenu創建新菜單“保存方式”
saveMenu = QMenu(‘保存方式(&S)‘, self)


創建“保存”
saveAct = QAction(QIcon(‘save.png‘),‘保存...‘, self)
saveAct.setShortcut(‘Ctrl+S‘)
saveAct.setStatusTip(‘保存文件‘)


創建“另存為”
saveasAct = QAction(QIcon(‘saveas.png‘),‘另存為...(&O)‘, self)
saveasAct.setStatusTip(‘文件另存為‘)


將“保存”和“另存為”添加到“保存方式”
saveMenu.addAction(saveAct)
saveMenu.addAction(saveasAct)

創建“新建”
newAct = QAction(QIcon(‘new.png‘),‘新建(&N)‘,self)
newAct.setShortcut(‘Ctrl+N‘)


創建菜單欄,並添加主菜單“文件”(一級菜單)
menubar = self.menuBar()
fileMenu = menubar.addMenu(‘文件(&F)‘)


添加“新建”、“保存方式”、“退出”三個二級菜單
addSeparator():在菜單中添加橫線分隔符號
fileMenu.addAction(newAct)
fileMenu.addMenu(saveMenu)
fileMenu.addSeparator()
fileMenu.addAction(exitAct)

上下菜單欄

程序示例

from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, qApp, QMenu
from PyQt5.QtGui import QIcon
import sys


class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        self.InitUI()

    def InitUI(self):
        self.statusBar().showMessage(‘準備就緒‘)
        self.setGeometry(300, 300, 400, 300)
        self.setWindowTitle(‘上下文菜單‘)
        self.show()

    def contextMenuEvent(self, event):
        cmenu = QMenu(self)

        newAct = cmenu.addAction("新建")
        opnAct = cmenu.addAction("保存")
        quitAct = cmenu.addAction("退出")
        action = cmenu.exec_(self.mapToGlobal(event.pos()))
        if action == quitAct:
            qApp.quit()


if __name__ == ‘__main__‘:
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

  

代碼解析

使用上下文菜單,我們必須重新實現contextMenuEvent()方法。
使用exec_()方法顯示上下文菜單
mapToGlobal()方法將窗口小部件坐標轉換為全局屏幕坐標。
action = cmenu.exec_(self.mapToGlobal(event.pos()))


如果從上下文菜單返回的操作等於退出操作,我們終止應用程序。
這裏我們沒有對“新建”與“退出”進行操作
if action == quitAct:
	qApp.quit()

  

工具欄

程序示例

from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, qApp, QMenu
from PyQt5.QtGui import QIcon
import sys

class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        self.InitUI()
    def InitUI(self):
        self.statusBar().showMessage(‘準備就緒‘)

        self.setGeometry(300,300,400,300)
        self.setWindowTitle(‘工具欄‘)

        exitAct = QAction(QIcon(‘exit.png‘), ‘退出(&E)‘, self)
        exitAct.setShortcut(‘Ctrl+Q‘)
        exitAct.setStatusTip(‘退出程序‘)
        exitAct.triggered.connect(qApp.quit)

        saveMenu = QMenu(‘保存方式(&S)‘, self)
        saveAct = QAction(QIcon(‘save.png‘),‘保存...‘, self)
        saveAct.setShortcut(‘Ctrl+S‘)
        saveAct.setStatusTip(‘保存文件‘)
        saveasAct = QAction(QIcon(‘saveas.png‘),‘另存為...(&O)‘, self)
        saveasAct.setStatusTip(‘文件另存為‘)
        saveMenu.addAction(saveAct)
        saveMenu.addAction(saveasAct)

        newAct = QAction(QIcon(‘new.png‘),‘新建(&N)‘,self)
        newAct.setShortcut(‘Ctrl+N‘)
        newAct.setStatusTip(‘新建文件‘)

        menubar = self.menuBar()
        fileMenu = menubar.addMenu(‘文件(&F)‘)
        fileMenu.addAction(newAct)
        fileMenu.addMenu(saveMenu)
        fileMenu.addSeparator()
        fileMenu.addAction(exitAct)

        toolbar = self.addToolBar(‘工具欄‘)
        toolbar.addAction(newAct)
        toolbar.addAction(exitAct)

        self.show()

if __name__ == ‘__main__‘:
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

  

代碼解析

工具欄使用addToolBar()方法創建。 我們使用addAction()向工具欄添加兩個動作對象。

toolbar = self.addToolBar(‘工具欄‘)
toolbar.addAction(newAct)
toolbar.addAction(exitAct)








QT學習之菜單欄與工具欄