PyQt5初级教程--PyQt5中的菜单和工具栏[4/13]

时间:2022-03-23 23:02:39

想用PyQt5写GUI,但是网上的PyQt5资源太少了,找到一个英文的,翻译一下,和学习PyQt5的同学共勉!

(本系列中所有代码在windows7 64位[]/Python 3.4.3 32bit/PyQt GPL v5.5 for Python v3.4 (x32)/eric6-6.0.8下测试通过.)

原本地址:http://zetcode.com/gui/pyqt5/

================================================================================

PyQt5中的菜单和工具栏

在这部分,我们会创建菜单和工具栏.一个菜单是在一个菜单条中的一组命令.一个工具栏是在程序中有一些常用命令的按钮.

主窗口

QMainWindow类提供了一个主程序窗口.这允许我们创建一个有状态栏、工具栏和菜单栏的典型程序架构.

状态栏

一个状态栏是一个用于显示状态信息的部件.

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_())

状态栏是通过QMainWindow部件的帮助下创建的.

self.statusBar().showMessage('Ready')

要得到状态栏,我们要调用QtGui.QMainWindow类中的statusBar()方法.第一次调用这个方法会创建一个状态栏.随后的调用会返回状态栏对象.showMessage()会显示一条信息在状态栏上.

菜单栏

一个菜单栏是一个GUI程序的通用部分.它是在不同菜单中的一组命令(Mac OS对待菜单栏不同.要得到相同的输出,我们需要添加下面这条代码:menubar.setNativeMenuBar(False).)

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):

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(300, 300, 300, 200)
self.setWindowTitle('Menubar')
self.show()


if __name__ == '__main__':

app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

在上面的例子中,我们创建了一个含有一个菜单的菜单栏.这个菜单会包含一个动作,那就是如果选择了它就会终止程序.一个状态栏也被创建了.动作是访问的Ctrl+Q快捷键.

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菜单,并将exit动作追加到它上面.

工具栏

菜单聚合了我们在程序中所有可以使用的命令.工具栏提供了最常用的命令的快捷访问.

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):

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

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

self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Toolbar')
self.show()


if __name__ == '__main__':

app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
在上面的例子中,我们创建了一个简单的工具栏.工具栏有一个工具动作,一个exit动作在被触发时会终止程序.

exitAction = QAction(QIcon('exit24.png'), 'Exit', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.triggered.connect(qApp.quit)
和上面的菜单栏例子相同,我们创建了一个动作对象.这个对象有一个标签、一个图标和一个快捷键.QtGui.QMainWindow的quit()方法被连接到触发的信号上.

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

这就是我们创建了一个工具栏并添加一个动作对象的例子.

PyQt5初级教程--PyQt5中的菜单和工具栏[4/13]

图片:工具栏

将它们放到一起

在这部分的最后一个例子,我们会创建一个菜单栏、工具栏和状态栏.我们还会创建一个中心部件.

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)

exitAction = QAction(QIcon('exit24.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.setGeometry(300, 300, 350, 250)
self.setWindowTitle('Main window')
self.show()


if __name__ == '__main__':

app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

这个代码例子创建了一个有菜单栏、工具栏和状态栏的典型GUI程序架构.

textEdit = QTextEdit()
self.setCentralWidget(textEdit)
在这里我们创建了一个文件编辑器部件.我们设置它为QMainWindow的中心部件.中心部件会占据所有的剩余区域.

PyQt5初级教程--PyQt5中的菜单和工具栏[4/13]

图片:主窗口