目錄
1、菜單欄
1.1、Qt Creator建立菜單欄
1.2、 菜單欄類建立菜單欄
2、工具欄
2.1、Qt Creator建立工具欄
2.2、 工具欄類建立工具欄
3、狀态欄
在使用Qt Creator建立UI檔案時,MainWindow主視窗,主要包含:菜單欄、工具欄、狀态欄等。

最後生成的UI檔案可以再進行信号和槽的功能代碼編寫。
在QMainWindow對象的标題欄下方,水準的QMenuBar被保留顯示QMenu對象。QMenu類提供了一個可以添加到菜單欄的小控件,也用于建立上下文菜單和彈出菜單。每個QMenu對象都可以包含一個或多個QAction對象或級聯的QMenu對象。
PyQt API提供了createPopupMenu()函數建立一個彈出菜單;menuBar()函數用于傳回主視窗的QMenuBar對象; addMenu()函數可以将菜單添加到菜單欄中;通過addAction()函數可以在菜單中進行添加操作等。在設計菜單系統時使用的一些重要方法如下表所示:
示例中,頂層視窗必須是QMainWindow對象,才可以引用QMenuBar對象。通過addMenu()方法将“File"菜單添加到菜單欄中。菜單中的操作按鈕可以是字元串或QAction對象。菜單發射triggered信号,将該信号連接配接到槽函數proecesstrigger(),該函數接收信号的QAction對象。單擊任何QAction按鈕時,QMenu對象都會發射triggered信号。
實作代碼如下所示:
import sys
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.addAction("New")
save = QAction("Save",self)
save.setShortcut("Ctrl+S")
file.addAction(save)
edit = file.addMenu("Edit")
edit.addAction("copy")
edit.addAction("paste")
quit = QAction("Quit",self)
file.addAction(quit)
file.triggered[QAction].connect(self.processtrigger)
self.setLayout(layout)
self.setWindowTitle("menu 例子")
self.resize(350,300)
def processtrigger(self,q):
print( q.text()+" is triggered" )
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = MenuDemo()
demo.show()
sys.exit(app.exec_())
QToolBar控件是由文本按鈕、圖示或其他小控件按鈕組成的可移動面闆,通常位于菜單欄下方。
使用Qt Designer預設生成的主視窗中不顯示工具欄,可以通過單擊滑鼠右鍵來添加工具欄,如下圖所示:
此時的工具欄是空的,沒有元件,如下所示:
可以在Qt Designer的屬性編輯器中建立addWinAction動作,并拖入添加到工具欄中,其詳細資訊如下圖所示:
同菜單欄一樣,最後生成的UI檔案可以再進行信号和槽的功能代碼編寫。
QToolBar類中的常用方法如下表所示:
每當單擊工具欄中的按鈕時,都将發射actionTriggered信号。另外,這個信号将關聯的QAction對象的引用發送到連接配接的槽函數上。
通個示例了解QToolBar工具欄類,示例效果如下所示:
示例中,首先調用addToolBar()方法在工具欄區域添加檔案工具欄。然後,添加具有文本标題的工具按鈕,工具欄通常包含圖形按鈕,具有圖示和名稱的QAction對象将被添加到工具欄中。最後,将actionTriggered信号連接配接到槽函數toolbtnpressed()。
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class ToolBarDemo( QMainWindow ):
def __init__(self, parent=None):
super(ToolBarDemo, self).__init__(parent)
self.setWindowTitle("toolbar 例子")
self.resize(300, 200)
layout = QVBoxLayout()
tb = self.addToolBar("File")
new = QAction(QIcon("./new.png"),"new",self)
tb.addAction(new)
open = QAction(QIcon("./open.png"),"open",self)
tb.addAction(open)
save = QAction(QIcon("./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 = ToolBarDemo()
demo.show()
sys.exit(app.exec_())
MainWindow對象在底部保留有一個水準條,作為狀态欄(QStatusBar),用于顯示永久的或臨時的狀态資訊。
QStatusBar類中的常用方法如下表所示:
通個示例了解QStatusBar狀态欄類,示例效果如下所示:
在這個例子中,頂層視窗MainWindow 有一個菜單欄和一個QTextEdit 對象,作為中心控件。當單擊MenuBar的菜單時,将triggered信号與槽函數processTrigger()進行綁定。當單擊"show"菜單選項時,會在狀态欄顯示提示資訊,并在5秒後消失。
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class StatusDemo(QMainWindow):
def __init__(self, parent=None):
super(StatusDemo, self).__init__(parent)
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_())