原文链接:
http://zetcode.com/gui/pyqt5/menustoolbars/
Statusbar
状态栏在QMainWindow组件的帮助下,创建成功。
在上述例子中,我们创建了一个只有一个菜单的菜单栏。这个菜单包含一个选中后中断程序的动作。快捷键为:Ctrl + Q。
还为该动作定义了一个快捷键。
在上述例子中,我们创建了一个简单的工具栏,该工具栏有一个动作,退出(当该动作被触发时,应用终止)
本节,我们将创建菜单和工具栏。
菜单是菜单栏中的一组命令,工具栏工具栏是应用程序中常用的按钮和一些命令。
Main Window
QMainWindow类提供了一个应用程序主窗口,这能够创建一个拥有状态栏、工具栏和菜单栏的经典应用窗口框架。
Statusbar
状态栏是一个用于显示状态信息的组件。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial
This program creates a statusbar.
author: Jan Bodnar
website: zetcode.com
last edited: January 2015
"""
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组件的帮助下,创建成功。
为了得到statusBar,我们调用了QtGui.QMainWindow类的statusBar()方法。第一次调用该方法创建了一个状态栏,之后方法返回这个statusBar的对象。
showMessage()方法在statusBar上面显示信息。
MenuBar
一个菜单栏是GUI程序的Common part。
是各种各样菜单中的一组命令操作
Mac OS 对待菜单栏有些不同。为了得到相似的效果,我们可以加入一行如下代码:
menubar.setNativeMenuBar(False)
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial
This program creates a menubar. The
menubar has one menu with an exit action.
author: Jan Bodnar
website: zetcode.com
last edited: January 2015
"""
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'标签创建了一个动作(Action)。
还为该动作定义了一个快捷键。
第三行代码,创建了一个状态tip,当我们将鼠标移动在菜单上时,显示在状态栏。
exitAction.triggered.connect(qApp.quit)
当我们选中特定的动作时,一个触发信号会被发送。信号连接到QApplication组件的quit()方法,这样就中断了应用。
menubar = self.menuBar() fileMenu = menubar.addMenu('&File') fileMenu.addAction(exitAction)上述代码的menubar()方法,返回一个菜单栏,我们创建了一个File菜单,将Exit Action添加到File菜单中
Toolbar
菜单组合了所有我们可以在应用中使用的命令。工具栏提供了一个快速访问频繁使用的命令的方式。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial
This program creates a toolbar.
The toolbar has one action, which
terminates the application, if triggered.
author: Jan Bodnar
website: zetcode.com
last edited: January 2015
"""
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_())
在上述例子中,我们创建了一个简单的工具栏,该工具栏有一个动作,退出(当该动作被触发时,应用终止)
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)这里我们创建一个工具栏,添加一个动作对象。
Putting it together
在该节的最后,我们创建一个菜单栏,工具栏,和一个状态栏。同时我们会创建一个中心组件。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial
This program creates a skeleton of
a classic GUI application with a menubar,
toolbar, statusbar, and a central widget.
author: Jan Bodnar
website: zetcode.com
last edited: January 2015
"""
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的中心组件。中心组件将会占据所有剩下的空间。
在该节的教程中,我们使用了菜单、工具栏、状态栏和一个应用的主窗口。