PyQt5學習記錄(2)---QMainWindow選單欄、狀態列和工具欄
阿新 • • 發佈:2018-12-13
QMainWindow
是繼承自QWidget
,提供一個應用程式的主視窗。通過QMainWindow你可以新增自己的QToolBars
、QDockWidgets
、QMenuBar
、QStatusBar
等。見下圖:
所以如果我們寫程式的話,主視窗一般都是繼承QMainWindow
,這個有點類似android裡的Activity
的意思。接下來我們就對最下面的狀態列(StatusBar)、最上面的選單欄(MenuBar)、以及工具欄(ToolBars)做單獨的說明.
狀態列(StatusBar)
原始碼如下:
#coding=utf-8 import sys from PyQt5.QtWidgets import QMainWindow, QApplication class Example1(QMainWindow): def __init__(self): super().__init__() self.initUI() pass def initUI(self): self.statusBar().showMessage('Reday') self.setGeometry(300, 300, 450, 450) self.setWindowTitle('QMainWindow的狀態列demo') self.show() pass def main1(): app = QApplication(sys.argv) example = Example1() sys.exit(app.exec_()) pass if __name__ == '__main__': main1()
效果如下所示:核心提示:通過statusBar()
讓QMainWindow建立一個狀態列,然後showMessage
列印資訊,之後再調statusBar將直接返回這個狀態列物件.
選單欄(MenuBar)
一個應用程式可以有很多個選單(橫向的),每個選單裡有很多個Action(豎排的)。 原始碼如下:
#coding=utf-8 import sys from PyQt5.QtWidgets import QMainWindow, QApplication, QMenuBar, QAction, qApp from PyQt5.QtGui import QIcon # 選單欄 class Example2(QMainWindow): def __init__(self): super().__init__() self.initUI() pass def initUI(self): self.statusBar() #建立一個空的狀態列 menubar = self.menuBar() menubar.setNativeMenuBar(False) fileMenu = menubar.addMenu('File') #給menu建立一個Action exitAction = QAction(QIcon('exit.png'), 'Exit', self) exitAction.setShortcut('Ctr+Q') exitAction.setStatusTip('Exit Application') exitAction.triggered.connect(qApp.quit) #將這個Action新增到fileMenu上 fileMenu.addAction(exitAction) self.setWindowTitle('QMainWindow的選單欄的顯示') self.setGeometry(300, 300, 450, 450) self.show() pass def main2(): app = QApplication(sys.argv) example = Example2() sys.exit(app.exec_()) pass if __name__ == '__main__': main2()
執行效果:
要點解釋
- 在Mac上要加
menubar.setNativeMenuBar(False)
,否則很可能不顯示。這是因為Mac上的選單欄不在應用程式的頂部,而是在整個桌面的頂部。加上這句話後顯示的是Windows上的樣式。 - 一個Menu必須要有一個Action才會顯示,至少在Mac上是這樣。
- Menu的關鍵字
File
、View
,系統會自動給你加一些Action。 - Action的關鍵字為
Exit
時,同樣不顯示。下面是Mac上把menubar.setNativeMenuBar(False)
去掉,把Action的關鍵字改成其他的效果. exitAction.triggered.connect(qApp.quit)
exitAction.triggered.connect(QCoreApplication.instance().exit)
效果是一樣的,可以看qApp實際是一個巨集。- Action的訊號是triggered, QPushButton的訊號是clicked。
- 在Mac上設定的退出快捷鍵好像沒有效果。
在選單欄裡可以把所有的按鈕都集中進來,但是最常用的按鈕可以放在工具欄,即選單欄的下方。
#coding=utf-8
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QMenuBar, QAction, qApp
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QCoreApplication
class Example3(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
exitAction = QAction(QIcon('exit.png'), '退出吧寶寶', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.triggered.connect(qApp.quit)
self.toolbar = self.addToolBar('Exit123')
self.toolbar.addAction(exitAction)
self.toolbar.addAction(QIcon('exit.png'), '翻滾')
self.setGeometry(300, 300, 450, 450)
self.setWindowTitle('QMainWindow的ToolBar')
self.show()
pass
def main3():
app = QApplication(sys.argv)
example = Example3()
sys.exit(app.exec_())
pass
if __name__ == '__main__':
main3()
效果如下:
要點解釋
- 通過
self.addToolBar('Exit')
建立一個ToolBar,一個ToolBar可以加多個Action,預設是橫向排列的。這裡的Exit僅僅是標識TooBar,因為一個QMainWindow也可以有多個ToolBar。如下程式碼展示:
self.toolbar = self.addToolBar('Exit123')
self.toolbar.addAction(exitAction)
self.toolbar.addAction(QIcon('exit.png'), '翻滾')
self.toolbar2 = self.addToolBar('Exit456')
self.toolbar2.addAction(exitAction)
self.toolbar2.addAction(QIcon('exit.png'), '翻滾')
效果如下:
狀態列、工具欄、選單欄綜合練習
程式碼如下:
#coding=utf-8
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QMenuBar, QAction, qApp, QTextEdit
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QCoreApplication
class Example4(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
textEdit = QTextEdit()
self.setCentralWidget(textEdit)
# 建立一個Action
exitAction = QAction(QIcon('exit.png'), 'Exit', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.setStatusTip('退出程式')
exitAction.triggered.connect(self.close)
# 底部狀態列
self.statusBar().showMessage('狀態列看我')
# 頂部選單欄
menubar = self.menuBar()
menubar.setNativeMenuBar(False)
fileMenu = menubar.addMenu('File')
fileMenu.addAction(exitAction)
# 次頂部的工具欄
toolbar = self.addToolBar('Exit')
toolbar.addAction(exitAction)
self.setGeometry(300, 300, 500, 500)
self.setWindowTitle('QMainWindow綜合使用')
self.show()
pass
def main4():
app = QApplication(sys.argv)
example = Example4()
sys.exit(app.exec_())
pass
if __name__ == '__main__':
main4()
效果
要點提示:setStatusTip
設定的東西會在底部的狀態列顯示。
--------------------- 本文來自 yanzi1225627 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/yanzi1225627/article/details/72598840?utm_source=copy