1. 程式人生 > >在PyQt5中的選單欄和工具欄

在PyQt5中的選單欄和工具欄

在這一部分,我們學習建立狀態列,選單欄和工具欄。一個選單是位於選單欄的一組命令。一個工具欄有一些按鈕,這些按鈕在應用程式中擁有一些常用命令。狀態列顯示狀態資訊,通常位於應用視窗下方。

QMainWindow

QMainWindow類提供了一個主應用視窗。這允許我們建立一個帶有狀態列,工具欄和選單欄的經典程式框架。

Statusbar(狀態列)

一個狀態列是用於顯示狀態資訊的一個元件。


#!/usr/bin/python3
# -*- coding:utf-8 -*- 

    import sys
    from PyQt5.QtWidgets import QMainWindow, QApplication

    class
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元件的幫助下被建立。


    self.statusBar().showMessage("Ready")

為了獲取狀態列,我們呼叫類QtGui.QMainWindowstatusBar()方法。該方法的第一個呼叫建立一個狀態列。子序列呼叫返回狀態列物件。showMessage()展示在狀態列上的資訊。

下面是這個小例子程式的執行結果:
enter description here

簡單的選單

選單欄是GUI應用程式的通用元件。他是一組位於多個選單的命令。(Mac OS以不同的方式對待選單欄。為了獲得相似的輸出,我們可以新增下列一行:menubar.setNativeMenubar(False)。)


#!/usr/bin/python3
# -*- coding:utf-8 -*-

import sys
from PyQt5.QtWidgets import QMainWindow,QAction, QApplication, qApp
from PyQt5.QtGui import QIcon

class Example(QMainWindow):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        exitAct = QAction(QIcon('exit.png'),'&Exit',self)
        exitAct.setShortcut('Ctrl+Q')
        exitAct.setStatusTip("Exit application")
        exitAct.triggered.connect(qApp.quit)

        self.statusBar()

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

在上面的例子程式中,我們建立了一個帶有一個選單的選單欄。這個選單包含一個動作,如果選中的話,將會終止該應用程式。當然,也建立了一個狀態列。這個動作也可以使用Ctrl+Q快捷鍵。


exitAct = QAction(QIcon("exit.png"),"&Exit",self)
exitAct.setShortcut("Ctrl+Q")
exitAct.setStatusTip("Exit application")

QAction是一個執行在選單欄,工具欄和定製鍵盤快捷鍵的抽象類。在上面三行中,我們使用特定的圖示和一個’Exit’標籤建立了一個行為。進一步說,一個快捷鍵為了這個行為被定義。第三行建立了一個狀態提示,當滑鼠經過該選單選項的時候,被顯示在狀態列上。


exitAct.triggered.connect(qApp.quit)

當我們選中這個特定的行為的時候,一個觸發的訊號被提交。該訊號被連線到QApplication元件的quit()方法。這個會終止這個程式。


menubar = self.menuBar()
fileMenu = menubar.addMenu("&File")
fileMenu.addAction(exitAct)

menuBar()方法建立了一個選單欄。我們使用addMenu()建立了一個檔案按鈕,並且使用addAction()方法新增一個行為。

下面是該小例子的截圖:

![enter description here][2

子選單

一個子選單是位於另外一個選單中的一個選單。


#!/usr/bin/python3
# -*- coding:utf-8 -*-

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)

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

在這個例子中,我們有兩個選單選項;一個位於檔案選單中,另一個位於檔案的Import子選單中。


impMenu = QMenu("Import", self)

新的選單使用QMenu建立。


impAct = QAction("Import mail", self)
impMenu.addAction(impAct)

一個行為通過使用addAction()被新增到子選單中。

enter description here

選項選單

在下面的例子中,我們建立了一個按鈕可以被選中或者是不被選中。


#!/usr/bin/python3
# -*- coding:utf-8 -*-

import sys
from PyQt5.QtWidgets import QMainWindow,QApplication,QAction

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")
        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_())

這個程式碼例子建立了帶有一個行為的檢視選單。這個行為顯示或者是隱藏狀態列。當狀態列可視的時候,選單選項被選中。


viewStatAct = QAction('View statusbar', self, checkable=True)

使用checkable選項,我們建立了一個可選擇選單。


viewStatAct.setChecked(True)

因為狀態列在一開始的時候是可視的,我們使用setChecked()方法來設定該行為。


def toggleMenu(self, state):
    if state:
        self.statusbar.show()
    else:
        self.statusbar.hide()

依賴於行為選中的狀態,我們設定狀態列是否顯示。

enter description here

上下文選單

一個上下文選單,也被稱作彈出選單,一個出現在一些上下文中的一個命令列表。例如,在一個Opera網頁瀏覽器中,當你在一個網頁中右擊的時候,我們獲得一個上下文選單。在這裡我們可以重新載入一個頁面,回退,或者是檢視頁面原始碼。如果我們右擊一個工具欄,我們將會得到管理工具欄的另一個上下文選單。


#!/usr/bin/python3
# -*- coding:utf-8 -*-

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")
        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_())

為了能夠使用上下文選單,我們必須重新整合contextMenuEvent()方法。


action = cmenu.exec_(self.mapTpGlobal(event.pos()))

該上下文選單被exec_()方法顯示。他們從事件物件中獲得滑鼠指標的座標。mapToGlobal()方法傳遞元件的座標到全域性的螢幕座標。


if action == quitAct:
    qApp.quit()

如果從上下文選單返回的行為等於退出行為,則程式被終止。

工具欄

在一個應用程式中,選單欄組織了所有的命令。工具欄提供了常用命令的快速訪問途徑。


#!/usr/bin/python3
# -*- coding:utf-8 -*-

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):

        exitAct = QAction(QIcon("exit.png"),"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_())

在上面的例子中,我們建立了一個簡單的工具欄。工具欄有一個工具行為,一個退出行為,當觸發的時候終止程式。


        exitAct = QAction(QIcon("exit.png"),"Exit",self)
        exitAct.setShortcut("Ctrl+Q")
        exitAct.triggered.connect(qApp.quit)

和上面例子中的選單欄一樣,我們建立了一個行為物件。該物件有一個標籤,圖示和一個快捷方式。Qt.QMainWindow中的一個quit()方法被連線到觸發訊號中。


     self.toolbar = self.addToolBar("Exit")
     self.toolbar.addAction(exitAct)

工具欄被addToolBar()被建立。我們使用addAction()方法新增一個行為物件到工具欄中。

把他們放到一起

在最後一個例子中,我們將會建立一個選單欄,工具欄和一個狀態列。我們也將會建立一箇中心的元件。


#!/usr/bin/python3
# -*- coding:utf-8 -*-

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("exit.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_())

在這裡,我們建立了一個文字編輯元件。我們也把它設定成為QMainWindow的中心元件。中心元件被分為剩餘空間的所有空間。

在這篇文章中,我們學習了選單欄,工具欄和狀態列,還有一個主程式視窗。

相關推薦

PyQt5選單工具

在這一部分,我們學習建立狀態列,選單欄和工具欄。一個選單是位於選單欄的一組命令。一個工具欄有一些按鈕,這些按鈕在應用程式中擁有一些常用命令。狀態列顯示狀態資訊,通常位於應用視窗下方。 QMainWindow QMainWindow類提供了一個主應用視窗。

PyQt5 學習記錄】005:QMainWindow 及狀態、菜單工具

qt5 open file statusbar ati etc con bubuko import 1 #!/usr/bin/env python 2 3 import sys 4 from PyQt5.QtWidgets import (QApplic

Qt學習(3)——選單工具

 0、建立專案: 前面步驟一樣,到下圖基類換一下: 1、選單欄 標頭檔案: 一些函式原型宣告: void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget, Qt::Orient

VC++單文件程式固定選單工具

MainFrm.cpp框架類下,找到OnCreate方法 m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY); m_wndToolBar.EnableDocking(

QT選單Menu與工具Toolbar各個Action的動態新增刪除

就像Swing裡面的Action一樣,Qt裡面也有一個類似的類,叫做QAction。顧名思義,QAction類儲存有關於這個動作,也就是action的資訊,比如它的文字描述、圖示、快捷鍵、回撥函式(也就是訊號槽),等等。神奇的是,QAction能夠根據新增的位置來改變自己的

(轉)IE瀏覽器的選單工具原理

1、最基本的彈出視窗程式碼】  其實程式碼非常簡單:  <SCRIPT LANGUAGE="javascript">  <!--  window.open ('page.html')  -->  </SCRIPT>  因為這是一段javas

福昕閱讀器不顯示選單工具

問題: 在使用福昕閱讀器的過程中,突然發現選單欄和工具欄都沒有了,甚至連滾動條都沒了,怎麼辦呢?點哪個地方都沒有右鍵選單可以把選單欄和工具欄調處理。 解決: 解決辦法其實很簡單,只需要按F9,選單就又

Qt5 選單工具的使用

選單欄 // 新建一個選單A QMenu* pMenuA = new QMenu("&qzher"); // q則為Alt方式的快捷鍵,&表示可以使用快捷鍵 // 新建

Mac 將窗口的標題工具合並

clas 標題欄 util light appear 通過 log false window 主要是通過設置屬性實現。 下面的是基於Qt的代碼,同時不顯示窗口標題和icon。 void MacUtils::CreateCocoaContianerForWindow(QWi

[Xcode10 實際操作]三、視圖控制器-(4)使用UINavigationController導航工具

根視圖 xcod code height 頂部 lec 顏色 image 插入 本文將演示如何顯示和隱藏導航視圖的導航欄和工具欄 打開第一個視圖控制器 1 import UIKit 2 3 class FirstSubViewController: UI

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

QMainWindow是繼承自QWidget,提供一個應用程式的主視窗。通過QMainWindow你可以新增自己的QToolBars、QDockWidgets、QMenuBar、QStatusBar等。見下圖: 所以如果我們寫程式的話,主視窗一般都是繼承QMainWind

pyqt5 -——選單工具

一. 狀態列 # -*- coding: utf-8 -*-# @Time : 2018/12/22 12:37# @Author : Bo# @Email : [email protected]# @File : demo3.py# @Software: PyCharmimpo

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 

選單工具

選單:   選單包括選單欄(wx.MenuBar)、選單(wx.Menu)和選單項(wx.MenuItem)      選單欄不新增到父視窗,需要在頂級視窗中通過SetMenuBar(menuBar)方法新增。選單欄(wx.MenuBar)通過Append(menu,title)方法將選單新增到選單欄中

C#選單工具之contextMenuStrip、menuStrip、statusStrip、toolStriptoolStripContainer

1、contextmenustrip:上下文選單(滑鼠右鍵選單) 2、menustrip:普通(窗體)選單 3、statusStrip狀態列 4、toolStrip工具欄,可匯入ico圖示 5、ToolStripContainer 這個控制元件其實很有意思,網上資料確

winform控制元件縮寫(三)選單工具

winform控制元件縮寫(三)選單和工具欄 序號 縮寫 空間名 1 cms ContextMenuStrip 2 mns

C#-WinForm-選單工具

C#-WinForm-選單和工具欄 通用屬性:   Enabled - 指示是否啟用該控制元件。   Visiable - 確定該控制元件是啟用還是隱藏的。   Checked - 指示元件是否處於選中狀態。   點選事件。 工具箱→選單和工具欄 1、Context

QtCreator 應用程式主視窗——選單(QMenuBar)工具(QToolBar)

1.選單欄(QMenuBar)和工具欄(QToolBar) 1.1 將選單項放在工具欄上面:將Action編輯器中的相應動作直接拖到工具欄上面 1.2 使用資源:新增資原始檔->Qt資原始檔-&g

【PyQt503】選單工具

選單和工具欄 選單式位於選單欄的一組命令操作。工具欄是應用窗體中由按鈕和一些常規命令操作組成的元件。 主視窗 QMainWindow類提供了一個應用主視窗。預設建立一個擁有狀態列、工具欄和選單欄的經典應用視窗骨架。 狀態列 狀態列是用來顯示狀態資訊的元件。 im

在mfc,如何設定一個隱藏選單工具,狀態列,最大化、最小化、關閉按鈕的窗體 分類: MFC

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {  if (CFrameWnd::OnCreate(lpCreateStruct) == -1)   return -1;  // 去掉標題欄  /*  i