PyQt4入门教程(3)_菜单栏和工具条

注:译者自己的话将用方括号【】标出。

在这一部分,我们将学会如何创建菜单和工具栏。菜单是位于菜单栏中的一系列命令,而工具栏是应用中一些常用功能的按钮。

主窗口(Main window)

QtGui.QMainWindow类提供了创建应用主窗口的方法,这使得用状态栏(statusbar)、菜单栏(menubar)、工具栏(toolbar)创建一个传统的应用框架成为可能。

状态栏(Statusbar)

状态栏的作用是显示状态信息。

# -*- coding: utf-8 -*-

"""
This program creates a statusbar.
"""

import sys
from PyQt4 import QtGui


class Example(QtGui.QMainWindow):

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

        self.initUI()


    def initUI(self):               

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

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Statusbar')    
        self.show()


def main():

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


if __name__ == '__main__':
    main()

可以看到,状态栏在QtGui.QMainWindow部件的帮助下得以创建。

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

为了得到一个状态栏,我们调用了QtGui.QMainWindow类中的statusBar()方法【注意Example是继承QMainWindow的】。函数调用创建了一个状态栏,接下来的showMessage()函数调用返回了一个状态栏对象,showMessage()里面的参数是显示在状态栏中的。

菜单栏(Menubar)

菜单栏是图形界面应用的一个常见部分,它是由一个个菜单组成的一组组命令。(Mac OS系统的菜单栏不大一样,为了得到和实例相似的效果,我们还应该加上下面这一行:menubar.setNativeMenubar(False))

# -*- coding: utf-8 -*-

"""
This program creates a menubar. The
menubar has one menu with an exit action.
"""

import sys
from PyQt4 import QtGui


class Example(QtGui.QMainWindow):

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

        self.initUI()


    def initUI(self):               

        exitAction = QtGui.QAction(QtGui.QIcon('exit.png'), '&Exit', self)        
        exitAction.setShortcut('Ctrl+Q')
        exitAction.setStatusTip('Exit application')
        exitAction.triggered.connect(QtGui.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()


def main():

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


if __name__ == '__main__':
    main()    

在上面这个示例中,我们创建了只由一个菜单组成的菜单栏。这个菜单也仅仅拥有一个选项【这里原文是action,为了方便理解,我们下面将这个action有时翻译成选项。】:结束应用。而且我们给这个选项添加了一个快捷键:Ctrl+Q。同时我们也创建了一个状态栏。

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

Qt.Gui.QAction是这个行为的一个抽象。在上面这三行中,我们创建了有着自己图标和名字一个选项,而且,我们给这个行为定义了一个快捷键。第三行创建了一个status tip,它的作用是鼠标放在这个选项上时,可以在状态栏中显示出状态“Exit application”。

exitAction.triggered.connect(QtGui.qApp.quit)

当我们选择了这个选项时,一个触发信号(triggered signal)被发出了。这个信号和QtGui.QApplication部件的quit()方法相联系(connect),所以信号发出后,程序终止。

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

menuBar()方法创建了一个菜单栏。这里我们在菜单栏的基础上创建了一个file菜单,并在里面添加了exit选项。

工具栏(Toolbar)

菜单中的命令是我们在应用中能够使用的全部命令,而工具栏使我们能够快速使用一些经常被使用的命令。

# -*- coding: utf-8 -*-

"""
This program creates a toolbar.
The toolbar has one action, which
terminates the application if triggered.
"""

import sys
from PyQt4 import QtGui


class Example(QtGui.QMainWindow):

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

        self.initUI()


    def initUI(self):               

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

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

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


def main():

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


if __name__ == '__main__':
    main()

在上面这个例子中,我们创建了一个简单的工具栏。这个工具栏只有一个工具选项——退出选项【同样,这里的Action我们为了便于理解有时翻译成选项】。

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

和上面那个菜单栏的例子类似,我们也先创建了一个行为(action)对象。这个对象有自己的标签【也就是名字】、图标和快捷键。同样,QtGui.QMainWindow的quit()方法被联系(connect)到了触发信号(triggered signal)上。

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

这里我们创建了一个工具栏并且给里面加入了一个选项。
最后效果是这样的:
toolbar

来个大杂烩吧

上面的例子中,我们分别创建了状态栏、菜单栏和工具栏,我们还创建了主窗口,现在我们应用所学知识把它们放在一块儿吧!

# -*- coding: utf-8 -*-

"""
This program creates a skeleton of
a classic GUI application with a menubar,
toolbar, statusbar and a central widget. 
"""

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


def main():

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


if __name__ == '__main__':
    main()    

这份代码展示了如何创建一个有菜单栏、工具栏、状态栏的传统图形界面应用的骨架。

textEdit = QtGui.QTextEdit()
self.setCentralWidget(textEdit)

也就这两句需要解释一下。这里我们创建了一个文本编辑框(text edit)部件。我们把它设置成QtGui.QMainWindow的中央部件,中央部件占据了各种栏之外所有的剩余空间。
最后效果是这样的:
mainwindow

这就是本节的内容了,我们学习了如何创建主窗口、状态栏、菜单栏和工具栏。

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值