QT學習之菜單欄與工具欄
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學習之菜單欄與工具欄