Menus and toolbars in PyQt5

来源:互联网 发布:木工雕刻机编程软件 编辑:程序博客网 时间:2024/06/01 09:31
原文链接:http://zetcode.com/gui/pyqt5/menustoolbars/


本节,我们将创建菜单和工具栏。
菜单是菜单栏中的一组命令,工具栏工具栏是应用程序中常用的按钮和一些命令。


Main Window

QMainWindow类提供了一个应用程序主窗口,这能够创建一个拥有状态栏、工具栏和菜单栏的经典应用窗口框架。

Statusbar

状态栏是一个用于显示状态信息的组件。

#!/usr/bin/python3# -*- coding: utf-8 -*-"""ZetCode PyQt5 tutorial This program creates a statusbar.author: Jan Bodnarwebsite: zetcode.com last edited: January 2015"""import sysfrom PyQt5.QtWidgets import QMainWindow, QApplicationclass 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. Themenubar has one menu with an exit action.author: Jan Bodnarwebsite: zetcode.com last edited: January 2015"""import sysfrom PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplicationfrom PyQt5.QtGui import QIconclass 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, whichterminates the application, if triggered.author: Jan Bodnarwebsite: zetcode.com last edited: January 2015"""import sysfrom PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplicationfrom PyQt5.QtGui import QIconclass 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 ofa classic GUI application with a menubar,toolbar, statusbar, and a central widget. author: Jan Bodnarwebsite: zetcode.com last edited: January 2015"""import sysfrom PyQt5.QtWidgets import QMainWindow, QTextEdit, QAction, QApplicationfrom PyQt5.QtGui import QIconclass 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的中心组件。中心组件将会占据所有剩下的空间。

在该节的教程中,我们使用了菜单、工具栏、状态栏和一个应用的主窗口。

0 0