您好,登錄后才能下訂單哦!
這篇文章主要介紹PyQt5中菜單欄和工具欄的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
在這一部分,我們學(xué)習(xí)創(chuàng)建狀態(tài)欄,菜單欄和工具欄。一個(gè)菜單是位于菜單欄的一組命令。一個(gè)工具欄有一些按鈕,這些按鈕在應(yīng)用程序中擁有一些常用命令。狀態(tài)欄顯示狀態(tài)信息,通常位于應(yīng)用窗口下方。
QMainWindow
QMainWindow類提供了一個(gè)主應(yīng)用窗口。這允許我們創(chuàng)建一個(gè)帶有狀態(tài)欄,工具欄和菜單欄的經(jīng)典程序框架。
Statusbar(狀態(tài)欄)
一個(gè)狀態(tài)欄是用于顯示狀態(tài)信息的一個(gè)組件。
#!/usr/bin/python3 # -*- coding:utf-8 -*- import sys from PyQt5.QtWidgets import QMainWindow, QApplication class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.statusBar().showMessage("Ready") self.setGeometry(300,300,250,150) self.setWindowTitle("StatusBar") self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
狀態(tài)欄在QMainWindow組件的幫助下被創(chuàng)建。
self.statusBar().showMessage("Ready")
為了獲取狀態(tài)欄,我們調(diào)用類QtGui.QMainWindow的statusBar()方法。該方法的第一個(gè)調(diào)用創(chuàng)建一個(gè)狀態(tài)欄。子序列調(diào)用返回狀態(tài)欄對(duì)象。showMessage()展示在狀態(tài)欄上的信息。
下面是這個(gè)小例子程序的運(yùn)行結(jié)果:
簡(jiǎn)單的菜單
菜單欄是GUI應(yīng)用程序的通用組件。他是一組位于多個(gè)菜單的命令。(Mac OS以不同的方式對(duì)待菜單欄。為了獲得相似的輸出,我們可以添加下列一行:menubar.setNativeMenubar(False)。)
#!/usr/bin/python3 # -*- coding:utf-8 -*- import sys from PyQt5.QtWidgets import QMainWindow,QAction, QApplication, qApp from PyQt5.QtGui import QIcon class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): exitAct = QAction(QIcon('exit.png'),'&Exit',self) exitAct.setShortcut('Ctrl+Q') exitAct.setStatusTip("Exit application") exitAct.triggered.connect(qApp.quit) self.statusBar() menubar = self.menuBar() fileMenu = menubar.addMenu("&File") fileMenu.addAction(exitAct) self.setGeometry(300,300,300,200) self.setWindowTitle("Simple menu") self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
在上面的例子程序中,我們創(chuàng)建了一個(gè)帶有一個(gè)菜單的菜單欄。這個(gè)菜單包含一個(gè)動(dòng)作,如果選中的話,將會(huì)終止該應(yīng)用程序。當(dāng)然,也創(chuàng)建了一個(gè)狀態(tài)欄。這個(gè)動(dòng)作也可以使用Ctrl+Q快捷鍵。
exitAct = QAction(QIcon("exit.png"),"&Exit",self) exitAct.setShortcut("Ctrl+Q") exitAct.setStatusTip("Exit application")
QAction是一個(gè)運(yùn)行在菜單欄,工具欄和定制鍵盤快捷鍵的抽象類。在上面三行中,我們使用特定的圖標(biāo)和一個(gè)'Exit'標(biāo)簽創(chuàng)建了一個(gè)行為。進(jìn)一步說(shuō),一個(gè)快捷鍵為了這個(gè)行為被定義。第三行創(chuàng)建了一個(gè)狀態(tài)提示,當(dāng)鼠標(biāo)經(jīng)過(guò)該菜單選項(xiàng)的時(shí)候,被顯示在狀態(tài)欄上。
exitAct.triggered.connect(qApp.quit)
當(dāng)我們選中這個(gè)特定的行為的時(shí)候,一個(gè)觸發(fā)的信號(hào)被提交。該信號(hào)被連接到QApplication組件的quit()方法。這個(gè)會(huì)終止這個(gè)程序。
menubar = self.menuBar() fileMenu = menubar.addMenu("&File") fileMenu.addAction(exitAct)
menuBar()方法創(chuàng)建了一個(gè)菜單欄。我們使用addMenu()創(chuàng)建了一個(gè)文件按鈕,并且使用addAction()方法添加一個(gè)行為。
下面是該小例子的截圖:
![enter description here][2
子菜單
一個(gè)子菜單是位于另外一個(gè)菜單中的一個(gè)菜單。
#!/usr/bin/python3 # -*- coding:utf-8 -*- import sys from PyQt5.QtWidgets import QMainWindow, QAction, QMenu, QApplication class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): menubar = self.menuBar() fileMenu = menubar.addMenu("File") impMenu = QMenu("Import",self) impAct = QAction("Import mail",self) impMenu.addAction(impAct) newAct = QAction("New", self) fileMenu.addAction(newAct) fileMenu.addMenu(impMenu) self.setGeometry(300,300,300,200) self.setWindowTitle("Submenu") self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
在這個(gè)例子中,我們有兩個(gè)菜單選項(xiàng);一個(gè)位于文件菜單中,另一個(gè)位于文件的Import子菜單中。
impMenu = QMenu("Import", self)
新的菜單使用QMenu創(chuàng)建。
impAct = QAction("Import mail", self) impMenu.addAction(impAct)
一個(gè)行為通過(guò)使用addAction()被添加到子菜單中。
選項(xiàng)菜單
在下面的例子中,我們創(chuàng)建了一個(gè)按鈕可以被選中或者是不被選中。
#!/usr/bin/python3 # -*- coding:utf-8 -*- import sys from PyQt5.QtWidgets import QMainWindow,QApplication,QAction class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.statusbar = self.statusBar() self.statusbar.showMessage("Ready") menubar = self.menuBar() viewMenu = menubar.addMenu("View") viewStatAct = QAction("View statusbar",self,checkable=True) viewStatAct.setStatusTip("View statusbar") viewStatAct.setChecked(True) viewStatAct.triggered.connect(self.toggleMenu) viewMenu.addAction(viewStatAct) self.setGeometry(300,300,300,200) self.setWindowTitle("Check menu") self.show() def toggleMenu(self,state): if state: self.statusbar.show() else: self.statusbar.hide() if __name__ == "__main__": app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
這個(gè)代碼例子創(chuàng)建了帶有一個(gè)行為的視圖菜單。這個(gè)行為顯示或者是隱藏狀態(tài)欄。當(dāng)狀態(tài)欄可視的時(shí)候,菜單選項(xiàng)被選中。
viewStatAct = QAction('View statusbar', self, checkable=True)
使用checkable選項(xiàng),我們創(chuàng)建了一個(gè)可選擇菜單。
viewStatAct.setChecked(True)
因?yàn)闋顟B(tài)欄在一開(kāi)始的時(shí)候是可視的,我們使用setChecked()方法來(lái)設(shè)置該行為。
def toggleMenu(self, state): if state: self.statusbar.show() else: self.statusbar.hide()
依賴于行為選中的狀態(tài),我們?cè)O(shè)置狀態(tài)欄是否顯示。
上下文菜單
一個(gè)上下文菜單,也被稱作彈出菜單,一個(gè)出現(xiàn)在一些上下文中的一個(gè)命令列表。例如,在一個(gè)Opera網(wǎng)頁(yè)瀏覽器中,當(dāng)你在一個(gè)網(wǎng)頁(yè)中右擊的時(shí)候,我們獲得一個(gè)上下文菜單。在這里我們可以重新加載一個(gè)頁(yè)面,回退,或者是查看頁(yè)面源碼。如果我們右擊一個(gè)工具欄,我們將會(huì)得到管理工具欄的另一個(gè)上下文菜單。
#!/usr/bin/python3 # -*- coding:utf-8 -*- import sys from PyQt5.QtWidgets import QMainWindow, qApp,QMenu,QApplication class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setGeometry(300,300,300,200) self.setWindowTitle("Context menu") self.show() def contextMenuEvent(self,event): cmenu = QMenu(self) newAct = cmenu.addAction("New") opnAct = cmenu.addAction("Open") quitAct = cmenu.addAction("Quit") 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()方法。
action = cmenu.exec_(self.mapTpGlobal(event.pos()))
該上下文菜單被exec_()方法顯示。他們從事件對(duì)象中獲得鼠標(biāo)指針的坐標(biāo)。mapToGlobal()方法傳遞組件的坐標(biāo)到全局的屏幕坐標(biāo)。
if action == quitAct: qApp.quit()
如果從上下文菜單返回的行為等于退出行為,則程序被終止。
工具欄
在一個(gè)應(yīng)用程序中,菜單欄組織了所有的命令。工具欄提供了常用命令的快速訪問(wèn)途徑。
#!/usr/bin/python3 # -*- coding:utf-8 -*- import sys from PyQt5.QtWidgets import QMainWindow, QAction, qApp,QApplication from PyQt5.QtGui import QIcon class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): exitAct = QAction(QIcon("exit.png"),"Exit",self) exitAct.setShortcut("Ctrl+Q") exitAct.triggered.connect(qApp.quit) self.toolbar = self.addToolBar("Exit") self.toolbar.addAction(exitAct) self.setGeometry(300,300,300,200) self.setWindowTitle("Toolbar") self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
在上面的例子中,我們創(chuàng)建了一個(gè)簡(jiǎn)單的工具欄。工具欄有一個(gè)工具行為,一個(gè)退出行為,當(dāng)觸發(fā)的時(shí)候終止程序。
exitAct = QAction(QIcon("exit.png"),"Exit",self) exitAct.setShortcut("Ctrl+Q") exitAct.triggered.connect(qApp.quit)
和上面例子中的菜單欄一樣,我們創(chuàng)建了一個(gè)行為對(duì)象。該對(duì)象有一個(gè)標(biāo)簽,圖標(biāo)和一個(gè)快捷方式。Qt.QMainWindow中的一個(gè)quit()方法被連接到觸發(fā)信號(hào)中。
self.toolbar = self.addToolBar("Exit") self.toolbar.addAction(exitAct)
工具欄被addToolBar()被創(chuàng)建。我們使用addAction()方法添加一個(gè)行為對(duì)象到工具欄中。
把他們放到一起
在最后一個(gè)例子中,我們將會(huì)創(chuàng)建一個(gè)菜單欄,工具欄和一個(gè)狀態(tài)欄。我們也將會(huì)創(chuàng)建一個(gè)中心的組件。
#!/usr/bin/python3 # -*- coding:utf-8 -*- import sys from PyQt5.QtWidgets import QMainWindow, QTextEdit, QAction,QApplication from PyQt5.QtGui import QIcon class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): textEdit = QTextEdit() self.setCentralWidget(textEdit) exitAct = QAction(QIcon("exit.png"),"Exit",self) exitAct.setShortcut("Ctrl+Q") exitAct.setStatusTip("Exit application") exitAct.triggered.connect(self.close) self.statusBar() menubar = self.menuBar() fileMenu = menubar.addMenu("&File") fileMenu.addAction(exitAct) toolbar = self.addToolBar("Exit") toolbar.addAction(exitAct) self.setGeometry(300,300,350,250) self.setWindowTitle("Main Window") self.show() if __name__ == "__main__": app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
在這里,我們創(chuàng)建了一個(gè)文本編輯組件。我們也把它設(shè)置成為QMainWindow的中心組件。中心組件被分為剩余空間的所有空間。
以上是“PyQt5中菜單欄和工具欄的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。