zoukankan      html  css  js  c++  java
  • 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)

    效果:

  • 相关阅读:
    深入探索迭代器(续)
    深入探索迭代器
    C++ 容器的综合应用的一个简单实例——文本查询程序
    multimap 和 multiset 类型
    set 类型
    map 类型
    关联容器
    Ajax请求成功, 但进不去success方法
    springboot指定配置文件启动项目
    新测可用IntelliJ IDEA 2020.1 for mac
  • 原文地址:https://www.cnblogs.com/hackpig/p/8253944.html
Copyright © 2011-2022 走看看