1. 程式人生 > >pyQt5-選單和工具欄

pyQt5-選單和工具欄

參考:

1、https://maicss.gitbooks.io/pyqt5/content/

2、https://github.com/maicss/PyQt5-Chinese-tutoral

3、https://doc.qt.io/qt-5/classes.html  API

選單和工具欄

主視窗

QMainWindow提供了主視窗的功能,使用它能建立一些簡單的狀態列、工具欄和選單欄。

主視窗是下面這些視窗的合稱,所以教程在最下方。

狀態列

狀態列是用來顯示應用的狀態資訊的元件。

#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial 
This program creates a statusbar. Author: Jan Bodnar Website: zetcode.com Last edited: August 2017 """ import sys from PyQt5.QtWidgets import QMainWindow, QApplication class Example(QMainWindow): # 狀態列是由QMainWindow建立的 def __init__(self): super().__init__() # 返回父類即QMainWindow的物件 self.initUI() # self
指的就是 QMainWindow的物件 def initUI(self): # 呼叫QtGui.QMainWindow類的statusBar()方法,建立狀態列。 # 第一次呼叫建立一個狀態列,返回一個狀態列物件。 # showMessage()方法在狀態列上顯示一條資訊。 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_())

選單欄

選單欄是非常常用的。是一組命令的集合(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 2017
"""
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):
        # QAction是選單欄、工具欄或者快捷鍵的動作的組合。
# 我們建立了一個圖示、一個exit的標籤和一個快捷鍵組合,都執行了一個動作
exitAct = QAction(QIcon('exit.png'), '&Exit', self) #
exitAct.setShortcut('Ctrl+Q') # 設定快捷鍵
# 建立了一個狀態列
exitAct.setStatusTip('Exit application')

        # 當執行這個指定的動作時,就觸發了一個事件
exitAct.triggered.connect(qApp.quit)

        self.statusBar()

        # menuBar()建立選單欄。這裡建立了一個選單欄,並在上面添加了一個file選單,
# 並關聯了點選退出應用的事件。
menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(exitAct)

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Simple menu')
        self.show()


if __name__ == '__main__':

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

子選單

子選單是巢狀在選單裡面的二級或者三級等的選單。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial 
This program creates a submenu.
Author: Jan Bodnar
Website: zetcode.com 
Last edited: August 2017
"""
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, QMenu, QApplication

class Example(QMainWindow):

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

        self.initUI()


    def initUI(self):

        menubar = self.menuBar()
        fileMenu = menubar.addMenu('File')

        impMenu = QMenu('Import', self)
        impAct = QAction('Import mail', self)
        impMenu.addAction(impAct) # 使用addAction新增一個動作
newAct = QAction('New', self)

        fileMenu.addAction(newAct)
        fileMenu.addMenu(impMenu)

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


if __name__ == '__main__':

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

勾選選單

#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial 
This program creates a checkable menu.
Author: Jan Bodnar
Website: zetcode.com 
Last edited: August 2017
"""
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, QApplication

class Example(QMainWindow):

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

        self.initUI()


    def initUI(self):

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

        menubar = self.menuBar()
        viewMenu = menubar.addMenu('View')

        # 本例建立了一個行為選單。這個行為/動作能切換狀態列顯示或者隱藏
viewStatAct = QAction('View statusbar', self, checkable=True)
        viewStatAct.setStatusTip('View statusbar')

        # checkable選項建立一個能選中的選單。預設設定為選中狀態
viewStatAct.setChecked(True)
        viewStatAct.triggered.connect(self.toggleMenu)

        viewMenu.addAction(viewStatAct)

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Check menu')
        self.show()

    # 依據選中狀態切換狀態列的顯示與否
def toggleMenu(self, state):

        if state:
            self.statusbar.show()
        else:
            self.statusbar.hide()


if __name__ == '__main__':

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

checkmenu

右鍵選單

#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial 
This program creates a context menu.
Author: Jan Bodnar
Website: zetcode.com 
Last edited: August 2017
"""
import sys
from PyQt5.QtWidgets import QMainWindow, qApp, QMenu, QApplication

class Example(QMainWindow):

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

        self.initUI()


    def initUI(self):

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Context menu')
        self.show()


    def contextMenuEvent(self, event):

           cmenu = QMenu(self)

           newAct = cmenu.addAction("New") # 新增方法選單
opnAct = cmenu.addAction("Open")
           quitAct = cmenu.addAction("Quit")

           # 使用exec_()方法顯示選單。從滑鼠右鍵事件物件中獲得當前座標。
# mapToGlobal()方法把當前元件的相對座標轉換為視窗(window)的絕對座標。
action = cmenu.exec_(self.mapToGlobal(event.pos()))

           if action == quitAct:
               qApp.quit()


if __name__ == '__main__':

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

工具欄

選單欄包含了所有的命令,工具欄就是常用的命令的集合。
#!/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: August 2017
"""
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):
        
        # 這個物件綁定了一個標籤,一個圖示和一個快捷鍵。這些行為被觸發的時候,
# 會呼叫QtGui.QMainWindowquit方法退出應用
exitAct = QAction(QIcon('1234.ico'), 'Exit', self)
        exitAct.setShortcut('Ctrl+Q')
        exitAct.triggered.connect(qApp.quit)

        self.toolbar = self.addToolBar('Exit') # 設定狀態資訊
self.toolbar.addAction(exitAct)

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


if __name__ == '__main__':

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

主視窗

主視窗就是上面三種欄目的總稱,現在我們把上面的三種欄在一個應用裡展示出來。

#!/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: August 2017
"""
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) # 設定在主視窗中心
exitAct = QAction(QIcon('exit24.png'), 'Exit', self)
        exitAct.setShortcut('Ctrl+Q')
        exitAct.setStatusTip('Exit application')
        exitAct.triggered.connect(self.close)

        # 狀態列
self.statusBar()

        # 選單
menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(exitAct)
        
        # 工具欄
toolbar = self.addToolBar('Exit')
        toolbar.addAction(exitAct) # 繫結行為
# 主視窗
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_())