1. 程式人生 > >【PyQt503】選單和工具欄

【PyQt503】選單和工具欄

選單和工具欄

選單式位於選單欄的一組命令操作。工具欄是應用窗體中由按鈕和一些常規命令操作組成的元件。

主視窗

QMainWindow類提供了一個應用主視窗。預設建立一個擁有狀態列、工具欄和選單欄的經典應用視窗骨架。

狀態列

狀態列是用來顯示狀態資訊的元件。

import sys
from PyQt5.QtWidgets import QMainWindow,QApplication

class Example(QMainWindow):

	def __init__(self):
	super(Example,self).__init__()
	self.initUI()

def initUI(self):
	self.statusBar().showMessage("Ready")
	self.resize(600,400)
	self.move(200,200)
	self.setWindowTitle('StatusBar')
	self.show()

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

狀態列由QMainWindow元件幫助建立完成(依賴於QMainWindow元件)。

self.statusBar().showMessage(‘Ready’)

為了得到狀態列,我們呼叫了QtGui.QMainWindow類的statusBar()方法。第一次呼叫這個方法建立了一個狀態列。隨後方法返回狀態列物件。然後用showMessage()方法在狀態列上顯示一些資訊。 在這裡插入圖片描述

選單欄

選單欄是GUI應用的常規組成部分。是位於各種選單中的一組命令操作(Mac OS 對待選單欄有些不同。為了獲得全平臺一致的效果,我們可以在程式碼中加入一行:menubar.setNativeMenuBar(False))。

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

class Example(QMainWindow):

def __init__(self):
    super(Example,self).__init__()
    self.initUI()

def initUI(self):
	exitAction = QAction (QIcon ('exit.png'), '&Exit', self)
	exitAction.setShortcut ('Ctrl+Q')
	exitAction.setStatusTip ('Exit application')
	exitAction.triggered.connect (qApp.quit)

	self.statusBar()

	menubar = self.menuBar()
	fileMenu = menubar.addMenu('&File')
	fileMenu.addAction(exitAction)

	self.setGeometry(200,200,600,400)
	self.setWindowTitle("Menubar")
	self.show()

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

在上面的例子中,我們建立了有一個選單項的選單欄。這個選單項包含一個選中後終端應用的動作。

exitAction = QAction (QIcon ('exit.png'), '&Exit', self)
exitAction.setShortcut ('Ctrl+Q')
exitAction.setStatusTip ('Exit application')

QAction是一個用於選單欄、工具欄或自定義快捷鍵的抽象動作行為。在上面的三行中,我們建立了一個有指定圖示和文字為“Exit”的標籤。靈位,還未這個動作定義了一個快捷鍵。第三行建立當我們滑鼠浮於選單項之上就會顯示的一個狀態提示。

exitAction.triggered.connect(qApp.quit)

當我們選中特定的動作,一個觸發訊號就會發射。訊號連線到QApplication元件的quit()方法。這樣就中斷了應用。

menubar = self.menuBar()
fileMenu = menubar.addMenu('&File')
fileMenu.addAction(exitAction)

menuBar()方法建立了一個選單欄。我們建立一個file選單,然後將退出動作新增到file選單中。 在這裡插入圖片描述

工具欄

選單可以整合所有命令,這樣我們可以在應用中使用這些被整合的命令。工具欄提供了一個快速訪問常用命令的方式。

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

class Example(QMainWindow):

	def __init__(self):
    	super(Example,self).__init__()
    	self.initUI()

	def initUI(self):
    	exitAction = QAction (QIcon ('images/huaji.png'), '&Exit', self)
    	exitAction.setShortcut ('Ctrl+Q')
    	exitAction.triggered.connect (qApp.quit)

    	self.toolbar = self.addToolBar('Exit')
    	self.toolbar.addAction(exitAction)

    	self.setGeometry(200,200,600,400)
    	self.setWindowTitle("Toolbar")
    	self.show()

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

上述例子中,我們建立了一個簡單的工具欄。工具欄有一個動作,當這個退出動作被觸發時應用將會被中斷。

exitAction = QAction (QIcon ('images/huaji.png'), '&Exit', self)
exitAction.setShortcut ('Ctrl+Q')
exitAction.triggered.connect (qApp.quit)

我們建立了一個動作物件,和之前選單欄中的部分程式碼相似。這個動作有一個標籤,圖示和快捷鍵。並且將Qt.QMainWindow的quit()方法連線到了觸發訊號上。

self.toolbar = self.addToolBar('Exit')
self.toolbar.addAction(exitAction)

這裡我們建立了一個工具欄,並且在其中插入一個動作物件。 在這裡插入圖片描述

將幾個元件放在一起使用

在上面的例子中,我們建立了選單欄、工具欄和狀態列。下面我們將建立一箇中心組建。

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

class Example(QMainWindow):

	def __init__(self):
    	super(Example,self).__init__()
    	self.initUI()

	def initUI(self):

    	textEdit = QTextEdit()
    	self.setCentralWidget(textEdit)

    	exitAction = QAction(QIcon('images/huaji.png'),'Exit',self)
    	exitAction.setShortcut('Ctrl+Q')
    	exitAction.setStatusTip('Exit application')
    	exitAction.triggered.connect(self.close)

    	self.statusBar()

    	menubar = self.menuBar()
    	fileMenu = menubar.addMenu('&File')
    	fileMenu.addAction(exitAction)

    	toolbar = self.addToolBar('Exit')
    	toolbar.addAction(exitAction)

    	self.move(200,200)
    	self.resize(600,400)
    	self.setWindowTitle('Main window')
    	self.show()

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

在這裡我們建立了一個文字編輯框元件。我們將它設定成QMainWindow的中間元件。中心元件佔據了所有剩下的空間。 在這裡插入圖片描述