溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python中PyQt5菜單和工具欄功能的作用是什么

發(fā)布時(shí)間:2022-03-04 15:11:12 來源:億速云 閱讀:212 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下Python中PyQt5菜單和工具欄功能的作用是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

1. 創(chuàng)建主窗口

上文中我們建立的圖形界面程序 GUIdemo2.py,通過導(dǎo)入圖形界面 uiDemo1.py,已經(jīng)實(shí)現(xiàn)了主窗口的創(chuàng)建。

1.1 窗口類型

進(jìn)一步地,在 QtDesigner 創(chuàng)建主窗口有三種類型:QMainWindow、QDialog 和 QWidget。

QMainWindow:包括菜單欄、工具欄、狀態(tài)欄和標(biāo)題欄,常用于應(yīng)用程序的窗口。

QDialog:沒有菜單欄、工具欄、標(biāo)題欄,常用于對(duì)話框的窗口。QtDesigner 中進(jìn)一步提供了:沒有默認(rèn)按鈕的對(duì)話框、底部按鈕的對(duì)話框和右側(cè)按鈕的對(duì)話框可供選擇。

QWidget:不確定窗口的類型。

新建應(yīng)用程序窗口,通常可以選擇 MainWindow 創(chuàng)建主窗口的圖形界面。QtDesigner 創(chuàng)建的 “MainWindow” 雖然是一個(gè)空白的圖形窗口,但已經(jīng)生成了 centralwidget、menubar、statusbar 三個(gè)基本控件,可以在右側(cè)上方 “對(duì)象查看器” 查看這些控件及結(jié)構(gòu)。

1.2 編輯窗口的屬性

在 QtDesigner 中用鼠標(biāo)選中主窗口,或者在右側(cè)的 “對(duì)象查看器” 中選中對(duì)象 “MainWindow”,此時(shí)右側(cè)中部的 “屬性編輯器” 將顯示對(duì)象 “MainWindow” 的屬性。在 “屬性編輯器” 內(nèi)可以對(duì)對(duì)象的屬性進(jìn)行編輯和修改。

  • 對(duì)象名稱(objectName)

當(dāng)前窗口對(duì)象的名稱(objectName)默認(rèn)為 “MainWindow”。對(duì)象名稱可以修改,但小白不要輕易去修改。在生成的 .ui 文件和 .py 文件中將定義一個(gè)類 Ui_MainWindow,在主程序調(diào)用圖形界面時(shí)也會(huì)實(shí)例化類。

如果修改了對(duì)象名稱,則主程序中需要進(jìn)行相應(yīng)修改。一些例程中定義類 Ui_Form,就是將窗口對(duì)象名稱設(shè)為 “Form”。

  • 窗口標(biāo)題(windowTitle)

當(dāng)前窗口對(duì)象的標(biāo)題(windowTitle)默認(rèn)值也是 “MainWindow”,因此容易將其與對(duì)象名稱(objectName)混淆。

窗口標(biāo)題顯示在應(yīng)用程序窗口的左上角,通常是程序名。窗口對(duì)象的標(biāo)題是可以根據(jù)需要修改的,本例修改為 “數(shù)字圖像處理”。

  • 應(yīng)用圖標(biāo)(windowIcon)

當(dāng)前窗口對(duì)象的圖標(biāo)(windowIcon)默認(rèn)值 Null,沒有圖標(biāo)。
- 點(diǎn)擊 “屬性編輯器” 下 windowIcon 行的右側(cè)空白處,將出現(xiàn) " [Theme]"、"…" 和 “ ▽ \triangledown ▽” 按鈕的選項(xiàng)框
- 點(diǎn)擊 “ ▽ \triangledown ▽” 按鈕,從 “選擇資源”、“選擇文件”、“選擇主題” 三個(gè)選項(xiàng)選中 “選擇文件”,從文件夾中選擇一個(gè)圖標(biāo)文件。
本例在 Python 當(dāng)前 Project 路徑下建立了 \image 目錄,圖標(biāo)和圖片文件都保存在 \image 目錄。本例選擇 youcans.png 作為應(yīng)用程序圖標(biāo),讀者可以任選自己的圖標(biāo)文件。

在 “屬性編輯器” 內(nèi)也可以對(duì)其它對(duì)象屬性進(jìn)行編輯和修改,例如:

  • 將 MainWindow 對(duì)象的高度修改為 800,寬度修改為 600;

1.3 圖形界面設(shè)計(jì)的預(yù)覽

在 QtDesigner 菜單中選擇:窗體 -> 預(yù)覽,就可以預(yù)覽設(shè)計(jì)的圖形界面,還可以選擇預(yù)覽不同操作系統(tǒng)的顯示效果。這使我們不需要編寫主程序就可以預(yù)覽圖形界面的顯示效果,以便進(jìn)行修改。

剛才所創(chuàng)建的應(yīng)用程序窗口預(yù)覽如下圖所示:

Python中PyQt5菜單和工具欄功能的作用是什么

2. 建立菜單欄

2.1 建立一級(jí)菜單

QtDesigner 創(chuàng)建的 “MainWindow” 圖形窗口,自動(dòng)生成了頂部菜單欄 menubar,在圖形窗口左上角顯示有文本輸入框 “在這里輸入”。

輸入菜單對(duì)象(menu)的標(biāo)題(title):

  • 鼠標(biāo)點(diǎn)擊文本輸入框 “在這里輸入”,選中文本輸入框,控件的邊框變?yōu)樽仙?/p>

  • 再雙擊選中的控件,出現(xiàn)激活的文本輸入框,就可以輸入所要建立菜單的標(biāo)題;

  • 輸入菜單標(biāo)題后回車結(jié)束,就建立了一個(gè)一級(jí)菜單,例如:將菜單標(biāo)題設(shè)為 “文件”。

輸入菜單對(duì)象的標(biāo)題,以及修改菜單對(duì)象的屬性,更通用的方法是:

  • 在 QtDesigner 右側(cè)的 “對(duì)象查看器” 中選中對(duì)象 “menu”,此時(shí)右側(cè)中部的 “屬性編輯器” 將顯示對(duì)象 “menu” 的屬性。

  • 在 “屬性編輯器” 內(nèi)選擇 “title” 屬性,將其修改為菜單標(biāo)題:“文件”。

建立一級(jí)菜單 “文件” 后,菜單欄中在 “文件” 右側(cè)又出現(xiàn)新的文本輸入框 “在這里輸入” ,按照以上操作可以接著建立更多的菜單對(duì)象。
本例中還建立了一個(gè)一級(jí)菜單對(duì)象 “menuQuit”,標(biāo)題為 “退出”。

2.2 建立二級(jí)菜單

QtDesigner 創(chuàng)建二級(jí)菜單,實(shí)際上是將動(dòng)作(action)添加到一級(jí)菜單。

  • 鼠標(biāo)點(diǎn)擊一級(jí)菜單對(duì)象 “文件”,出現(xiàn)兩個(gè)下拉菜單選項(xiàng):“在這里輸入” 和 “添加分割符”。

  • 選中 “在這里輸入”,輸入二級(jí)菜單的標(biāo)題。
    我們發(fā)現(xiàn)這時(shí)文本輸入框不接受中文輸入,于是輸入英文 “Open”,生成二級(jí)菜單項(xiàng)。觀察 QtDesigner 右側(cè)的 “對(duì)象查看器”,在 menubar-menu 下新建的并不是控件對(duì)象,而是動(dòng)作 actionOpen。這就是剛才文本輸入框不接受中文的原因。

  • 編輯動(dòng)作 actionOpen 的屬性,可以將屬性 “text” 由 “Open” 修改為中文 “打開”。這時(shí)再點(diǎn)擊菜單 “文件”,下拉菜單中的動(dòng)作 actionOpen 就顯示為中文 “打開”。類似地,在一級(jí)菜單對(duì)象 “文件” 下,再建立兩個(gè)二級(jí)菜單(動(dòng)作)“Save”、“Close”,并將其屬性 “text” 修改為 “保存”、“關(guān)閉”。

  • 點(diǎn)擊二級(jí)菜單/動(dòng)作 “打開”,在其右側(cè)有個(gè) “+” 按鈕,點(diǎn)擊后可以創(chuàng)建新的下一級(jí)菜單。
    注意:這時(shí)剛才建立的動(dòng)作對(duì)象 “menu-actionOpen” 被自動(dòng)刪除了,同時(shí)生成了一個(gè)菜單對(duì)象 “menu-menu_2”。這是因?yàn)橹挥凶钕录?jí)的菜單項(xiàng)被設(shè)為動(dòng)作對(duì)象 “QAction”,而上級(jí)菜單項(xiàng)只能是菜單對(duì)象 “QMenu”。

本例還在一級(jí)菜單對(duì)象 “menuQuit” 下建立了動(dòng)作對(duì)象 “actionQuit”,標(biāo)題為 “Quit”。

預(yù)覽一下應(yīng)用程序窗口,就可以看到剛才建立的菜單欄:

Python中PyQt5菜單和工具欄功能的作用是什么

2.3 關(guān)聯(lián)動(dòng)作

我們已經(jīng)在圖形界面建立了菜單項(xiàng),并為菜單項(xiàng)添加了動(dòng)作對(duì)象。但是動(dòng)作對(duì)象中的 “打開”、“保存”、“關(guān)閉” 只是這些動(dòng)作對(duì)象的名稱和描述,并沒有定義或關(guān)聯(lián)具體的動(dòng)作。

因此在點(diǎn)擊菜單時(shí),雖然會(huì)顯示對(duì)應(yīng)的菜單選項(xiàng),但并不會(huì)真正進(jìn)行 “打開”、“關(guān)閉” 的動(dòng)作。下面以一級(jí)菜單 “退出” 下的動(dòng)作對(duì)象 “actionQuit” 為例,講解將關(guān)閉動(dòng)作(close)關(guān)聯(lián)到動(dòng)作對(duì)象 “actionQuit” 。

這里要簡(jiǎn)單解釋一下 PyQt5 中的信號(hào)與槽機(jī)制。信號(hào)與槽是 PyQt5 中對(duì)象之間進(jìn)行通信的機(jī)制。簡(jiǎn)單地說,對(duì)某個(gè)信號(hào)與某個(gè)槽函數(shù)進(jìn)行連接之后,當(dāng)該信號(hào)被觸發(fā)時(shí),自動(dòng)執(zhí)行對(duì)應(yīng)的槽函數(shù)。

因此,將一個(gè)動(dòng)作關(guān)聯(lián)到一個(gè)動(dòng)作對(duì)象(或其它對(duì)象),就是定義了對(duì)象的動(dòng)作(例如點(diǎn)擊菜單項(xiàng))作為信號(hào),并連接到對(duì)應(yīng)的動(dòng)作處理函數(shù)。當(dāng)該信號(hào)被觸發(fā)時(shí),將自動(dòng)執(zhí)行對(duì)應(yīng)的槽函數(shù)(動(dòng)作處理函數(shù))。例如,將點(diǎn)擊動(dòng)作對(duì)象 “actionQuit” 作為信號(hào),連接到動(dòng)作處理類 close(),則在該對(duì)象被點(diǎn)擊時(shí)就會(huì)自動(dòng)執(zhí)行類 close(),進(jìn)而執(zhí)行 QDialog 類中的closeEvent() 方法。

將動(dòng)作函數(shù) close() 關(guān)聯(lián)到動(dòng)作對(duì)象 “actionQuit” 的操作如下:

  • 從在 QtDesigner 右側(cè)下方窗口 “信號(hào)/槽編輯器”,點(diǎn)擊綠色的 “+” 新建一個(gè)信號(hào)/槽連接;

  • 點(diǎn)擊 “<發(fā)送者>”,從菜單中選擇對(duì)象 “actionQuit”;

  • 點(diǎn)擊 “<信號(hào)>”,從菜單中選擇 “triggered()”;

  • 點(diǎn)擊 “<接收者>”,從菜單中選擇 “MainWindow”;

  • 點(diǎn)擊 “<槽>”,從菜單中選擇 “closed()”。

以上操作的作用是:發(fā)送者 對(duì)象 “actionQuit” 觸發(fā) “triggered()” 時(shí),接收者 對(duì)象"MainWindow" 執(zhí)行槽函數(shù) “closed()”。

QtDesigner 中 “信號(hào)/槽編輯器” 的使用確實(shí)比較繁瑣,特別是對(duì)于菜單欄和工具欄的支持并不友好,而且不支持一級(jí)菜單對(duì)象直接連接槽函數(shù)。

相比而言,對(duì)于菜單欄和工具欄,在主程序中通過 connect() 建立信號(hào)/槽連接則更加簡(jiǎn)便:

self.actionQuit.triggered.connect(MainWindow.close)

3. 建立工具欄

工具欄/工具條是圖形界面中的常用組件,將一組按鈕控件排成一行放在圖形窗口的頂部。

3.1 添加工具欄

QtDesigner 中 添加工具欄的操作很簡(jiǎn)單,但是不太好找:

  • 單擊鼠標(biāo)右鍵,選擇 “添加工具欄”。

  • 也可以選擇 “Add Toolbar to Other Area”,將工具欄添加到窗口的左側(cè)、右側(cè)或底部。

添加工具欄以后,在頂部菜單欄的下方出現(xiàn)工具欄。新添加的工具欄是空的,非常窄,不加注意就容易被忽略。

3.2 添加和編輯動(dòng)作對(duì)象

工具欄中只能添加動(dòng)作控件(QAction),因此要先添加/編輯動(dòng)作。

其實(shí)上文中菜單欄中也只能添加動(dòng)作控件,但是菜單欄允許在輸入二級(jí)菜單時(shí)直接添加動(dòng)作控件(QAction),而工具欄只允許選擇已有的動(dòng)作控件添加。

在 QtDesigner 右側(cè)下方窗口選擇 “動(dòng)作編輯器”,可以新建或編輯動(dòng)作對(duì)象。

在 1.2 建立二級(jí)菜單時(shí),我們已經(jīng)建立了 actionOpen、actionSave、actionClosr、actionQuit等動(dòng)作對(duì)象。這些動(dòng)作對(duì)象顯示在 “動(dòng)作編輯器” 子窗口中。

添加/編輯動(dòng)作對(duì)象步驟為:

  • 點(diǎn)擊 “動(dòng)作編輯器” 子窗口工具欄的第一個(gè)圖標(biāo)按鈕 “新建”,則彈出 “新建動(dòng)作” 對(duì)話框;

  • 雙擊 “動(dòng)作編輯器” 中的動(dòng)作對(duì)象,則彈出 “編輯動(dòng)作” 對(duì)話框,可以編輯已有動(dòng)作對(duì)象的屬性;

“新建動(dòng)作” 與 “編輯動(dòng)作” 對(duì)話框的結(jié)構(gòu)是相同的,對(duì)照已有動(dòng)作對(duì)象的屬性更容易理解 “新建動(dòng)作” 對(duì)話框中屬性選項(xiàng)的含義:

  • “文本” 指動(dòng)作的標(biāo)題,是控件的顯示內(nèi)容,可以是中文或英文,例如 “打開(Open)”;

  • “對(duì)象名稱” 指動(dòng)作的名稱,是程序中調(diào)用對(duì)象的名稱,只能是英文,例如 “actionOpen”;

  • “圖標(biāo)” 指工具欄中所顯示的動(dòng)作圖標(biāo),點(diǎn)擊 “ ▽ \triangledown ▽” 按鈕,選擇 “選擇文件” 選項(xiàng),可以從文件夾中選擇圖標(biāo)文件。

本例添加了動(dòng)作對(duì)象:“actionSetup/設(shè)置”、“actionHelp/幫助”,并編輯動(dòng)作對(duì)象 “actionQuit/退出” 設(shè)置動(dòng)作圖標(biāo)。

3.3 向工具欄添加動(dòng)作對(duì)象

從 QtDesigner 右側(cè)下方窗口選擇 “動(dòng)作編輯器”,鼠標(biāo)左鍵點(diǎn)擊選中其中的動(dòng)作控件,長(zhǎng)按鼠標(biāo)不放,拖動(dòng)到圖形窗口的工具欄后松開,就將動(dòng)作控件添加到工具欄中。

如果動(dòng)作對(duì)象設(shè)有圖標(biāo),則在工具欄顯示動(dòng)作圖標(biāo);如果動(dòng)作對(duì)象沒有設(shè)置圖標(biāo),則在工具欄顯示動(dòng)作標(biāo)題的文本信息。

本例將 “動(dòng)作編輯器” 中的 6個(gè)動(dòng)作對(duì)象都添加到工具欄。

預(yù)覽一下應(yīng)用程序窗口,就可以看到剛才建立的工具欄。

該窗口的工具欄中 “打開”、“保存”、“關(guān)閉” 三個(gè)動(dòng)作對(duì)象顯示為文字,而 “設(shè)置”、“幫助”、“退出” 三個(gè)動(dòng)作對(duì)象顯示為圖標(biāo),顯得不倫不類,這主要是為了示范不同的顯示選項(xiàng)。隨后我們會(huì)進(jìn)行修改,為 “打開”、“保存”、“關(guān)閉” 等動(dòng)作對(duì)象添加圖標(biāo)。

Python中PyQt5菜單和工具欄功能的作用是什么

4. 編寫 Python 應(yīng)用程序調(diào)用圖形界面

為 “打開”、“保存”、“關(guān)閉” 等動(dòng)作對(duì)象添加圖標(biāo),在 QtDesigner 將設(shè)計(jì)的圖形界面保存為 uiDemo3.ui。

在 PyCharm 選中 uiDemo3.ui 文件,點(diǎn)擊鼠標(biāo)右鍵喚出下拉菜單,選擇:ExternalTools -> PyUIC,點(diǎn)擊鼠標(biāo)左鍵運(yùn)行 PyUIC 將選中的 .ui 文件轉(zhuǎn)換為 .py 文件,在該路徑生成 uiDemo3.py 文件。

我們編寫一個(gè)主程序調(diào)用設(shè)計(jì)的圖形界面 uiDemo3.py,就可以完成一個(gè)圖形界面應(yīng)用程序。

# GUIdemo3.py
# Demo3 of GUI by PyQt5
# Copyright 2021 youcans, XUPT
# Crated:2021-10-08
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys
import uiDemo3  # 導(dǎo)入圖像界面設(shè)計(jì)文件
if __name__ == '__main__':
    app = QApplication(sys.argv)  # 創(chuàng)建應(yīng)用程序?qū)ο?
    MainWindow = QMainWindow()  # 創(chuàng)建主窗口
    ui = uiDemo3.Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()  # 顯示主窗口
    sys.exit(app.exec_())  # 在主線程中退出

在主程序 GUIdemo3.py 中,我們通過 “import uiDemo3” 導(dǎo)入了 圖形界面 uiDemo3.py。

運(yùn)行程序 GUIdemo3,彈出的圖形界面與 3.3 中的預(yù)覽效果是一致的,只是添加圖標(biāo)后的動(dòng)作對(duì)象 “打開”、“保存”、“關(guān)閉” 在工具欄已經(jīng)顯示為圖標(biāo)。

Python中PyQt5菜單和工具欄功能的作用是什么

GUIdemo3 中只有 "退出" 按鈕和菜單項(xiàng)有效,點(diǎn)擊后退出應(yīng)用程序。其它按鈕和菜單項(xiàng)還是無效的。這是因?yàn)槲覀冞€沒有為這些控件關(guān)聯(lián)動(dòng)作程序(連接槽函數(shù))。

以上是“Python中PyQt5菜單和工具欄功能的作用是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI