1. 程式人生 > >PyQt5學習記錄(2)---QMainWindow選單欄、狀態列和工具欄

PyQt5學習記錄(2)---QMainWindow選單欄、狀態列和工具欄

QMainWindow是繼承自QWidget,提供一個應用程式的主視窗。通過QMainWindow你可以新增自己的QToolBarsQDockWidgetsQMenuBarQStatusBar等。見下圖: 所以如果我們寫程式的話,主視窗一般都是繼承QMainWindow,這個有點類似android裡的Activity的意思。接下來我們就對最下面的狀態列(StatusBar)、最上面的選單欄(MenuBar)、以及工具欄(ToolBars)做單獨的說明.

狀態列(StatusBar)

原始碼如下:

#coding=utf-8
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication

class Example1(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()
        pass

    def initUI(self):
        self.statusBar().showMessage('Reday')
        self.setGeometry(300, 300, 450, 450)
        self.setWindowTitle('QMainWindow的狀態列demo')
        self.show()
        pass

def main1():
    app = QApplication(sys.argv)
    example = Example1()
    sys.exit(app.exec_())
    pass

if __name__ == '__main__':
    main1()

效果如下所示:核心提示:通過statusBar()讓QMainWindow建立一個狀態列,然後showMessage列印資訊,之後再調statusBar將直接返回這個狀態列物件.

選單欄(MenuBar)

一個應用程式可以有很多個選單(橫向的),每個選單裡有很多個Action(豎排的)。 原始碼如下:

#coding=utf-8
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QMenuBar, QAction, qApp
from PyQt5.QtGui import QIcon

# 選單欄
class Example2(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()
        pass

    def initUI(self):
        self.statusBar() #建立一個空的狀態列
        menubar = self.menuBar()
        menubar.setNativeMenuBar(False)
        fileMenu = menubar.addMenu('File')

        #給menu建立一個Action
        exitAction = QAction(QIcon('exit.png'), 'Exit', self)
        exitAction.setShortcut('Ctr+Q')
        exitAction.setStatusTip('Exit Application')
        exitAction.triggered.connect(qApp.quit)

        #將這個Action新增到fileMenu上
        fileMenu.addAction(exitAction)

        self.setWindowTitle('QMainWindow的選單欄的顯示')
        self.setGeometry(300, 300, 450, 450)
        self.show()
        pass

def main2():
    app = QApplication(sys.argv)
    example = Example2()
    sys.exit(app.exec_())
    pass

if __name__ == '__main__':
    main2()

執行效果:

要點解釋

  1. 在Mac上要加menubar.setNativeMenuBar(False),否則很可能不顯示。這是因為Mac上的選單欄不在應用程式的頂部,而是在整個桌面的頂部。加上這句話後顯示的是Windows上的樣式。
  2. 一個Menu必須要有一個Action才會顯示,至少在Mac上是這樣。
  3. Menu的關鍵字FileView,系統會自動給你加一些Action。
  4. Action的關鍵字為Exit時,同樣不顯示。下面是Mac上把menubar.setNativeMenuBar(False)去掉,把Action的關鍵字改成其他的效果.
  5. exitAction.triggered.connect(qApp.quit)
    的效果和exitAction.triggered.connect(QCoreApplication.instance().exit)效果是一樣的,可以看qApp實際是一個巨集。
  6. Action的訊號是triggered, QPushButton的訊號是clicked
  7. 在Mac上設定的退出快捷鍵好像沒有效果。

在選單欄裡可以把所有的按鈕都集中進來,但是最常用的按鈕可以放在工具欄,即選單欄的下方。

#coding=utf-8
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QMenuBar, QAction, qApp
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QCoreApplication

class Example3(QMainWindow):

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

    def initUI(self):
        exitAction = QAction(QIcon('exit.png'), '退出吧寶寶', self)
        exitAction.setShortcut('Ctrl+Q')
        exitAction.triggered.connect(qApp.quit)

        self.toolbar = self.addToolBar('Exit123')
        self.toolbar.addAction(exitAction)
        self.toolbar.addAction(QIcon('exit.png'), '翻滾')

        self.setGeometry(300, 300, 450, 450)
        self.setWindowTitle('QMainWindow的ToolBar')
        self.show()
        pass

def main3():
    app = QApplication(sys.argv)
    example = Example3()
    sys.exit(app.exec_())
    pass

if __name__ == '__main__':
    main3()

效果如下:

要點解釋

  1. 通過self.addToolBar('Exit')建立一個ToolBar,一個ToolBar可以加多個Action,預設是橫向排列的。這裡的Exit僅僅是標識TooBar,因為一個QMainWindow也可以有多個ToolBar。如下程式碼展示:
    self.toolbar = self.addToolBar('Exit123')
        self.toolbar.addAction(exitAction)
        self.toolbar.addAction(QIcon('exit.png'), '翻滾')

        self.toolbar2 = self.addToolBar('Exit456')
        self.toolbar2.addAction(exitAction)
        self.toolbar2.addAction(QIcon('exit.png'), '翻滾')

效果如下:

狀態列、工具欄、選單欄綜合練習

程式碼如下:

#coding=utf-8
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QMenuBar, QAction, qApp, QTextEdit
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QCoreApplication

class Example4(QMainWindow):

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

    def initUI(self):
        textEdit = QTextEdit()
        self.setCentralWidget(textEdit)

        # 建立一個Action
        exitAction = QAction(QIcon('exit.png'), 'Exit', self)
        exitAction.setShortcut('Ctrl+Q')
        exitAction.setStatusTip('退出程式')
        exitAction.triggered.connect(self.close)

        # 底部狀態列
        self.statusBar().showMessage('狀態列看我')

        # 頂部選單欄
        menubar = self.menuBar()
        menubar.setNativeMenuBar(False)
        fileMenu = menubar.addMenu('File')
        fileMenu.addAction(exitAction)

        # 次頂部的工具欄
        toolbar = self.addToolBar('Exit')
        toolbar.addAction(exitAction)

        self.setGeometry(300, 300, 500, 500)
        self.setWindowTitle('QMainWindow綜合使用')
        self.show()
        pass

def main4():
    app = QApplication(sys.argv)
    example = Example4()
    sys.exit(app.exec_())
    pass

if __name__ == '__main__':
    main4()

效果

要點提示:setStatusTip設定的東西會在底部的狀態列顯示。

--------------------- 本文來自 yanzi1225627 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/yanzi1225627/article/details/72598840?utm_source=copy