Python pyQt4/pyQt5 学习笔记2(状态栏、菜单栏和工具栏)
例子:状态栏、菜单栏和工具栏
import sys from PyQt4 import QtGui class Example(QtGui.QMainWindow): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): textEdit = QtGui.QTextEdit() self.setCentralWidget(textEdit) exitAction = QtGui.QAction(QtGui.QIcon(), 'Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.setStatusTip('Exit application') exitAction.triggered.connect(self.close) bar1=self.statusBar()
bar1.showMessage('Ready') 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() def main(): app = QtGui.QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) if __name__ == '__main__': main()
运行效果如下:
下面解释上面的代码:
class Example(QtGui.QMainWindow): def __init__(self): super(Example, self).__init__() self.initUI()
注意Example类继承于QtGui.QMainWindow
QtGui.QMainWindow类提供了创建应用主窗口的方法,这使得用状态栏(statusbar)、菜单栏(menubar)、工具栏(toolbar)创建一个传统的应用框架成为可能。
textEdit = QtGui.QTextEdit()
self.setCentralWidget(textEdit)
这里我们创建了一个文本编辑框(text edit)部件。我们把它设置成QtGui.QMainWindow的中央部件,中央部件占据了各种栏之外所有的剩余空间
exitAction = QtGui.QAction(QtGui.QIcon(), 'Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.setStatusTip('Exit application') exitAction.triggered.connect(self.close) menubar = self.menuBar() fileMenu = menubar.addMenu('&File') fileMenu.addAction(exitAction)
在上面这个示例中,我们创建了只由一个菜单组成的菜单栏。这个菜单也仅仅拥有一个选项【这里原文是action,为了方便理解,我们下面将这个action有时翻译成选项。】:结束应用。而且我们给这个选项添加了一个快捷键:Ctrl+Q。
Qt.Gui.QAction是这个行为的一个抽象。在上面这三行中,我们创建了有着自己图标和名字一个选项,而且,我们给这个行为定义了一个快捷键。第三行创建了一个status tip,它的作用是鼠标放在这个选项上时,可以在状态栏中显示出状态“Exit application”。
当我们选择了这个选项时,一个触发信号(triggered signal)被发出了。这个信号和QtGui.QApplication部件的quit()方法相联系(connect),所以信号发出后,程序终止。
menuBar()方法创建了一个菜单栏。这里我们在菜单栏的基础上创建了一个file菜单,并在里面添加了exit选项
bar1=self.statusBar() bar1.showMessage('Ready')
为了得到一个状态栏,我们调用了QtGui.QMainWindow类中的statusBar()方法【注意Example是继承QMainWindow的】。函数调用创建了一个状态栏,接下来的showMessage()函数调用返回了一个状态栏对象,showMessage()里面的参数是显示在状态栏中的。
toolbar = self.addToolBar('Exit') toolbar.addAction(exitAction)
我们创建了一个工具栏并且给里面加入了一个选项, 就是菜单选项exitAction
下面是PyQt5的相同功能的例子(macOS版本)
1 import sys 2 from PyQt5.QtWidgets import QApplication, QWidget, QTextEdit, QAction, QMainWindow 3 from PyQt5.QtGui import QIcon 4 5 class Example(QMainWindow): 6 7 def __init__(self): 8 super(Example, self).__init__() 9 self.initUI() 10 11 12 def initUI(self): 13 textEdit = QTextEdit() 14 self.setCentralWidget(textEdit) 15 16 exitAction = QAction(QIcon(), 'Exit', self) 17 exitAction.setShortcut('Ctrl+Q') 18 exitAction.setStatusTip('Exit application') 19 exitAction.triggered.connect(self.close) 20 21 bar1=self.statusBar() 22 bar1.showMessage('Ready') 23 24 menubar = self.menuBar() 25 menubar.setNativeMenuBar(False) 26 27 fileMenu = menubar.addMenu('&File') 28 fileMenu.addAction(exitAction) 29 30 toolbar = self.addToolBar('Exit') 31 toolbar.addAction(exitAction) 32 33 self.setGeometry(300, 300, 350, 250) 34 self.setWindowTitle('Main window') 35 self.show() 36 37 38 def main(): 39 app = QApplication(sys.argv) 40 ex = Example() 41 sys.exit(app.exec_()) 42 43 44 if __name__ == '__main__': 45 main()
Mac OS 对待菜单栏有些不同。为了获得全平台一致的效果,我们可以在代码中加入一行:menubar.setNativeMenuBar(False)
效果: