日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

Python 小白从零开始 PyQt5 项目实战(3)信号与槽的连接

發(fā)布時(shí)間:2025/3/15 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 小白从零开始 PyQt5 项目实战(3)信号与槽的连接 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本系列面向 Python 小白,從零開始實(shí)戰(zhàn)解說(shuō)應(yīng)用 QtDesigner 進(jìn)行 PyQt5 的項(xiàng)目實(shí)戰(zhàn)。
什么叫從零開始?從軟件安裝、環(huán)境配置開始。不跳過(guò)一個(gè)細(xì)節(jié),不漏掉一行代碼,不省略一個(gè)例圖。
本文講解信號(hào)與槽的連接機(jī)制,詳細(xì)示范各種類型的信號(hào)/槽連接的實(shí)現(xiàn)方法,這是圖形用戶界面的核心內(nèi)容。
本文還將介紹面向?qū)ο蟮某绦蛟O(shè)計(jì),這是圖形用戶界面的基本思想。

歡迎關(guān)注『Python 小白從零開始 PyQt5 項(xiàng)目實(shí)戰(zhàn) @ Youcans』系列,持續(xù)更新中
Python 小白從零開始 PyQt5 項(xiàng)目實(shí)戰(zhàn)(1)安裝與環(huán)境配置
Python 小白從零開始 PyQt5 項(xiàng)目實(shí)戰(zhàn)(2)菜單和工具欄
Python 小白從零開始 PyQt5 項(xiàng)目實(shí)戰(zhàn)(3)信號(hào)與槽的連接



1. 信號(hào)與槽(Signals and slots)

信號(hào)與槽機(jī)制是 PyQt 的核心機(jī)制,用于對(duì)象之間的通信,也就是實(shí)現(xiàn)函數(shù)之間的自動(dòng)調(diào)用。

1.1 信號(hào)與槽的原理

簡(jiǎn)單地說(shuō),將信號(hào)與槽函數(shù)連接后,當(dāng)信號(hào)被觸發(fā)時(shí),槽函數(shù)將被自動(dòng)調(diào)用。

分析這個(gè)過(guò)程,涉及到幾個(gè)基本概念和關(guān)系:

  • 信號(hào):信號(hào)可以是一個(gè)動(dòng)作,也可以是對(duì)象的一種狀態(tài),用于觸發(fā)所連接的槽。
  • 槽:槽就是一個(gè)函數(shù),可以由連接的信號(hào)觸發(fā)。
  • 發(fā)射信號(hào):信號(hào)被發(fā)射時(shí),自動(dòng)調(diào)用信號(hào)連接的槽函數(shù)。通常,在對(duì)象的狀態(tài)改變時(shí)發(fā)射信號(hào)。
  • 信號(hào)可以帶有參數(shù),但必須與槽函數(shù)的參數(shù)相對(duì)應(yīng)。
  • 一個(gè)信號(hào)可以連接多個(gè)槽函數(shù),多個(gè)信號(hào)也可以連接到一個(gè)槽函數(shù)。
  • 一個(gè)信號(hào)可以連接到另一個(gè)信號(hào)上。
  • 很多窗口部件(控件)內(nèi)置了一下信號(hào)和槽,可以直接調(diào)用。也可以按需求自定義信號(hào)和槽。

1.2 信號(hào)發(fā)送者與槽的接收者

信號(hào)的發(fā)送者通常是一個(gè)控件對(duì)象,在控件對(duì)象的狀態(tài)發(fā)生變化時(shí)發(fā)送信號(hào)。常見的發(fā)送者是圖形窗口中的各種控件對(duì)象,但也可以是動(dòng)作對(duì)象。

槽的接收者通常也是控件對(duì)象。槽函數(shù)是一個(gè)自定義的槽函數(shù),或控件內(nèi)置的槽函數(shù)。一般地,槽函數(shù)也有一個(gè)對(duì)象作為主體,即對(duì)于接受者這個(gè)控件對(duì)象執(zhí)行函數(shù)定義的操作。例如槽函數(shù)執(zhí)行的功能是關(guān)閉,哪么究竟是關(guān)閉那個(gè)控件呢?關(guān)閉對(duì)象就是接受者。

為了方便講解信號(hào)與槽的連接,我們用 QtDesigner 在上節(jié)設(shè)計(jì)的圖形窗口 uiDemo3.ui 的基礎(chǔ)上,增加幾個(gè)按鈕對(duì)象和文本行編輯對(duì)象:

  • 打開 PyCharm,從 Tools -> ExternalTools -> QtDesigner 打開 QtDesigner,打開 uiDemo3.ui 文件。

  • 鼠標(biāo)點(diǎn)擊選中 QtDesigner 左側(cè)控件欄 Buttons 中的 PushButton,按住鼠標(biāo)不放,將其拖動(dòng)到中間的圖形界面后松開鼠標(biāo),就在圖形界面中創(chuàng)建了一個(gè) PushButton 控件。

  • 鼠標(biāo)點(diǎn)擊選中 QtDesigner 左側(cè)控件欄 InputWidget 中的 LineEdit,按住鼠標(biāo)不放,將其拖動(dòng)到中間的圖形界面后松開鼠標(biāo),就在圖形界面中創(chuàng)建了一個(gè) LineEdit 控件。

  • 重復(fù)以上步驟,再建立幾個(gè) PushButton 控件和 LineEdit 控件。

    • 注意在 QtDesigner 右側(cè) “對(duì)象查看器” 中所顯示的控件名稱和屬性,多個(gè) PushButton、LineEdit 被自動(dòng)賦予不同的命名(objectName),如:LineEdit_1、LineEdit_2、LineEdit_3,這就如同桌子有幾個(gè)抽屜分別標(biāo)記為 “抽屜1”、“抽屜2”、“抽屜3” 以便識(shí)別。
    • 控件的名稱和其它屬性都可以在 “屬性編輯器” 中編輯修改。
  • 鼠標(biāo)選中在圖形界面中創(chuàng)建的 PushButton 控件或 LineEdit 控件,可以拖動(dòng)控件調(diào)整位置。

  • 鼠標(biāo)雙擊 PushButton 按鈕,可以編輯按鈕控件的標(biāo)簽即按鈕上的顯示內(nèi)容。
    為了便于講解,本例將各 PushButton 控件的顯示內(nèi)容(text 屬性)修改為:“1# 按鈕” ~ “4# 按鈕”,將各 LineEdit 控件的顯示內(nèi)容(text 屬性)修改為:“文本編輯行-1” ~ “文本編輯行-3”。

將這個(gè)應(yīng)用程序圖形界面另存為 uiDemo4.ui,其預(yù)覽效果如下:



2. QtDesigner 建立信號(hào)與槽的連接

2.1 信號(hào)與槽的連接:不同的發(fā)送者與接收者,槽函數(shù)為控件的內(nèi)置函數(shù)

QtDesigner 提供了便捷和直觀的信號(hào)/槽編輯方法。

本例介紹不同的發(fā)送者與接收者,槽函數(shù)為控件的內(nèi)置函數(shù)的操作方法。不同類型的控件分別內(nèi)置了若干方法,例如 QPushButton 控件內(nèi)置的方法包括:點(diǎn)擊、選中、狀態(tài)變化、顯示菜單等,而 QLineEdit 控件內(nèi)置的方法包括:清空、復(fù)制、剪切、粘貼、全選、撤銷操作等。使用控件內(nèi)置的方法作為槽函數(shù),可以直接調(diào)用,不需要對(duì)函數(shù)進(jìn)行定義。

我們所設(shè)計(jì)的功能是:當(dāng)點(diǎn)擊按鈕控件 “pushButton_1” 時(shí),清空文本編輯控件 “l(fā)ineEdit_1” 的顯示內(nèi)容。注意我們稱按鈕控件為 “l(fā)ineEdit_1” 而不是 “文本編輯行-1”,這是因?yàn)?lineEdit_1 才是控件名稱,在程序中是不變的,而 “文本編輯行-1” 只是顯示內(nèi)容,可以在程序中修改。

QtDesigner 設(shè)置信號(hào)/槽的連接的操作步驟如下:

  • (1)選擇菜單項(xiàng) “Edit” -> 編輯信號(hào)/槽,或者通過(guò)快捷鍵 F4 或在工具欄選擇,進(jìn)入信號(hào)/槽編輯模式。
  • (2)選中控件對(duì)象發(fā)送者,此處為按鈕控件 “pushButton_1”,鼠標(biāo)左鍵長(zhǎng)按不放,該按鈕控件變?yōu)闇\紅色。
    • 鼠標(biāo)左鍵繼續(xù)長(zhǎng)按不放,并移動(dòng)鼠標(biāo),當(dāng)鼠標(biāo)移出控件對(duì)象區(qū)域后,出現(xiàn)一條帶箭頭的紅線和一個(gè)紅色的接地符號(hào)。
    • 鼠標(biāo)左鍵繼續(xù)長(zhǎng)按不放,并拖動(dòng)鼠標(biāo)到控件對(duì)象 “l(fā)ineEdit_1”,松開鼠標(biāo)左鍵,就建立了以控件對(duì)象 “pushButton_1” 為發(fā)送者、控件對(duì)象 “l(fā)ineEdit_1” 為接收者的信號(hào)/槽連接。
    • 此時(shí)控件對(duì)象 “pushButton_1” 和 “l(fā)ineEdit_1” 都變?yōu)闇\紅色,帶箭頭的紅線從 “pushButton_1” 出發(fā),指向 “l(fā)ineEdit_1” 結(jié)束。
  • (3)同時(shí)彈出對(duì)話框 “配置連接 - QtDesigner”,對(duì)話框的左側(cè)顯示發(fā)送者控件的信號(hào)選項(xiàng),對(duì)話框的右側(cè)顯示接收者的控件選項(xiàng)。
    • 根據(jù)功能要求,觸發(fā)信號(hào)為按鈕 “pushButton_1” 被點(diǎn)擊,從對(duì)話框左側(cè)選中 “clicked()”;
    • 根據(jù)功能要求,收到信號(hào)后動(dòng)作是清空文本編輯控件 “l(fā)ineEdit_1”,從對(duì)話框右側(cè)選中 “clear()”;
    • 點(diǎn)擊對(duì)話框下方的按鈕 “OK”,完成該信號(hào)/槽連接的配置。


2.2 信號(hào)與槽的連接:不同的發(fā)送者與接收者,槽函數(shù)為自定義函數(shù)

本例介紹不同的發(fā)送者與接收者,槽函數(shù)為自定義函數(shù)的操作方法。

在 2.1 中介紹了使用控件內(nèi)置的方法作為槽函數(shù),可以直接調(diào)用,不需要對(duì)函數(shù)進(jìn)行定義。程序設(shè)計(jì)中的核心功能通常是程序員根據(jù)需求開發(fā)的自定義函數(shù)。使用自定義函數(shù)作為槽函數(shù),一方面當(dāng)然是要編寫自定義函數(shù),另一方面要將自定義函數(shù)添加到槽函數(shù)配置連接表中。

我們所設(shè)計(jì)的功能是:當(dāng)點(diǎn)擊按鈕控件 “pushButton_2” 時(shí),清空文本編輯控件 “l(fā)ineEdit_2” 的顯示內(nèi)容,并顯示文本信息 “current signal: click pushButton_2”。在主程序中要編寫一個(gè)自定義函數(shù)實(shí)現(xiàn)該功能,將該自定義函數(shù)命名為 click_pushButton_2()。

注意我們編寫的自定義函數(shù) click_pushButton_2(),雖然功能只是對(duì)文本編輯控件 “l(fā)ineEdit_2” 進(jìn)行操作,但對(duì)于自定義函數(shù)也可以完成任意的其它功能,對(duì)其它控件按照控件名稱進(jìn)行操作。因此該槽函數(shù)的接收者并不是文本編輯控件 “l(fā)ineEdit_2”,而是主窗口控件 “MainWindow”。

QtDesigner 設(shè)置信號(hào)/槽的連接的操作步驟如下:

**首先要在 QtDesigner 將自定義函數(shù)添加到槽函數(shù)配置連接表中——非常重要。**網(wǎng)上的很多文章都沒有講具體實(shí)現(xiàn)方法,這個(gè)操作的入口也很難找到。

  • (1)在 QtDesigner 右側(cè)上方的 “對(duì)象查看器”,選中 MainWindow 或其它頂層對(duì)象,單擊鼠標(biāo)右鍵喚出下拉菜單,選擇 “改變信號(hào)/槽”;
    • 彈出 “MainWindow 的信號(hào)/槽” 對(duì)話框,對(duì)話框的上方顯示槽的選項(xiàng),下方顯示信號(hào)選項(xiàng)。
    • 點(diǎn)擊對(duì)話框上方 “槽” 選項(xiàng)框下部的綠色 “+”,系統(tǒng)在 “槽” 選項(xiàng)表的最后自動(dòng)增加了一行 “slot1()”。這就是新增的自定義槽函數(shù)。
    • 點(diǎn)擊選中 “slot1()”,再鼠標(biāo)雙擊,就可以修改槽函數(shù)的函數(shù)名,例如修改為 click_pushButton_2()。
    • 再點(diǎn)擊對(duì)話框上方 “槽” 選項(xiàng)框下部的綠色 “+”,可以繼續(xù)逐一添加自定義的槽函數(shù)。


然后設(shè)置信號(hào)/槽的連接:

  • (2)選擇菜單項(xiàng) “Edit” -> 編輯信號(hào)/槽,或者通過(guò)快捷鍵 F4 或在工具欄選擇,進(jìn)入信號(hào)/槽編輯模式。
    • 選中控件對(duì)象發(fā)送者,此處為按鈕控件 “pushButton_2”,長(zhǎng)按鼠標(biāo)左鍵并移動(dòng),當(dāng)鼠標(biāo)移出控件對(duì)象區(qū)域后,出現(xiàn)一條帶箭頭的紅線和一個(gè)紅色的接地符號(hào)。
    • 松開鼠標(biāo)左鍵,就建立了以控件對(duì)象 “pushButton_2” 為發(fā)送者、控件對(duì)象 “MainWindow” 為接收者的信號(hào)/槽連接。
      此時(shí)控件對(duì)象 “pushButton_2” 變?yōu)闇\紅色,帶箭頭的紅線從 “pushButton_2” 出發(fā),并不指向其它控件,而是以一個(gè)接地符號(hào)結(jié)束。
  • (3)同時(shí)彈出對(duì)話框 “配置連接 - QtDesigner”,對(duì)話框的左側(cè)顯示發(fā)送者控件 “pushButton_2” 的信號(hào)選項(xiàng),對(duì)話框的右側(cè)顯示接收者 “MainWindow” 的控件選項(xiàng)。
    • 根據(jù)功能要求,觸發(fā)信號(hào)為按鈕 “pushButton_2” 被點(diǎn)擊,從對(duì)話框左側(cè)選中 “clicked()”;
    • 對(duì)話框右側(cè)接收者 “MainWindow” 的控件選項(xiàng)列表中,顯示了剛才添加的幾個(gè)自定義函數(shù),選擇 “click_pushButton_2()”;
    • 點(diǎn)擊對(duì)話框下方的按鈕 “OK”,完成該信號(hào)/槽連接的配置。


最后,別忘了要在主程序中編寫自定義的函數(shù)。但這已不屬于 QtDesigner 設(shè)計(jì)的內(nèi)容了,在此不再詳述。

類似地,我們?cè)O(shè)計(jì):當(dāng)點(diǎn)擊按鈕控件 “pushButton_3” 時(shí),在文本編輯控件 "lineEdit_1"顯示當(dāng)前系統(tǒng)日期,在文本編輯控件 "lineEdit_2"顯示當(dāng)前系統(tǒng)時(shí)間,在文本編輯控件 “l(fā)ineEdit_3” 顯示提示信息。在主程序中編寫一個(gè)自定義函數(shù) click_pushButton_3(),并與 “pushButton_3” 建立信號(hào)/槽連接。

這表明:在自定義的子函數(shù)中,可以同時(shí)操作多個(gè)控件對(duì)象,進(jìn)而可以實(shí)現(xiàn)用戶定義的各種功能。


2.3 信號(hào)與槽的連接:相同的發(fā)送者與接收者,槽函數(shù)為控件的內(nèi)置函數(shù)

本例介紹相同的發(fā)送者與接收者,槽函數(shù)為控件的內(nèi)置函數(shù)的操作方法。

顧名思義,相同的發(fā)送者與接收者,就是說(shuō)信號(hào)的發(fā)送者與槽函數(shù)的接收者是同一個(gè)控件對(duì)象。這是什么情況?例如,一個(gè)開關(guān)按鈕有 “On/Off” 兩種狀態(tài),每按一次則按鈕狀態(tài)發(fā)生翻轉(zhuǎn)。類似地,選項(xiàng)框也有選中、未選中兩種狀態(tài)。特殊地,點(diǎn)擊按鈕后,關(guān)閉該按鈕控件,也屬于相同的發(fā)送者與接收者。

我們首先將控件對(duì)象 “pushButton_4” 從按鈕控件 QPushButton 改變?yōu)?選項(xiàng)框控件 “QCheckBox”:

  • 點(diǎn)擊控件對(duì)象 “pushButton_4”,控件對(duì)象的周圍邊界顯示幾個(gè)藍(lán)色小方塊;
  • 點(diǎn)擊鼠標(biāo)右鍵喚出下拉菜單,選擇:“變型為” ->“QCheckBox”。

此時(shí),設(shè)計(jì)界面窗口中的按鈕控件,變成了一個(gè)選項(xiàng)框。同時(shí),右側(cè) “對(duì)象查看器” 中的控件 “pushButton_4”,也自動(dòng)變更為 “checkBox_4”。變更的控件 “checkBox_4” 繼承了原來(lái)控件 “pushButton_4” 的一些屬性,如:位置、尺寸、顯示內(nèi)容。

接下來(lái)設(shè)置信號(hào)/槽的連接:

  • (1)選擇菜單項(xiàng) “Edit” -> 編輯信號(hào)/槽,或者通過(guò)快捷鍵 F4 或在工具欄選擇,進(jìn)入信號(hào)/槽編輯模式。
  • (2)選中控件對(duì)象發(fā)送者,此處為按鈕控件 “checkBox_4”,長(zhǎng)按鼠標(biāo)左鍵并移動(dòng),當(dāng)鼠標(biāo)移出控件對(duì)象區(qū)域后,出現(xiàn)一條帶箭頭的紅線和一個(gè)紅色的接地符號(hào)。
    • 長(zhǎng)按鼠標(biāo)左鍵,拖動(dòng)鼠標(biāo)再回到控件對(duì)象 “checkBox_4” 區(qū)域后松開鼠標(biāo)左鍵,就建立了發(fā)送者和接收者都是控件對(duì)象 “checkBox_4” 的信號(hào)/槽連接。
    • 此時(shí)控件對(duì)象 “checkBox_4” 變?yōu)闇\紅色,帶箭頭的紅線從 “checkBox_4” 出發(fā),又返回到 “checkBox_4” 結(jié)束。
  • (3)同時(shí)彈出了對(duì)話框 “配置連接 - QtDesigner”,對(duì)話框的左側(cè)和右側(cè)分別是控件對(duì)象 “checkBox_4” 的信號(hào)和槽函數(shù)。
    • 從對(duì)話框左側(cè)選中 “clicked(bool)”;
    • 從對(duì)話框右側(cè)選中 “setChecked(bool)”;
    • 點(diǎn)擊對(duì)話框下方的按鈕 “OK”,完成該信號(hào)/槽連接的配置。


2.4 信號(hào)與槽的連接:發(fā)送者是動(dòng)作對(duì)象

常見的信號(hào)發(fā)送者是圖形窗口中的各種控件對(duì)象,但也可以是動(dòng)作對(duì)象。本例介紹對(duì)菜單欄和工具欄中控件對(duì)象建立信號(hào)與槽的連接。

信號(hào)的發(fā)送者是動(dòng)作對(duì)象時(shí),信號(hào)的接收者通常是頂層對(duì)象 “MainWindow”,而槽函數(shù)可以是對(duì)象 “MainWindow” 的內(nèi)置函數(shù),也可以是自定義函數(shù)。

在上一篇文章中我們?cè)鵀椴藛螜诤凸ぞ邫谥械膭?dòng)作 “actionQuit” 建立信號(hào)/槽連接,就是發(fā)送者是動(dòng)作對(duì)象、連接到對(duì)象 “MainWindow” 的內(nèi)置函數(shù)的案例。其操作過(guò)程如下:

  • 從在 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()”。

下面我們?cè)贋榱硪粋€(gè)動(dòng)作 “actionHelp” 建立信號(hào)/槽連接,連接的槽函數(shù)為自定義函數(shù) trigger_actHelp()。其操作過(guò)程如下:

  • 在 QtDesigner 將自定義函數(shù) trigger_actHelp() 添加到槽函數(shù)配置連接表中;
  • 從在 QtDesigner 右側(cè)下方窗口 “信號(hào)/槽編輯器”,點(diǎn)擊綠色的 “+” 新建一個(gè)信號(hào)/槽連接;
  • 點(diǎn)擊 “<發(fā)送者>”,從菜單中選擇對(duì)象 “actionHelp”;
  • 點(diǎn)擊 “<信號(hào)>”,從菜單中選擇 “triggered()”;
  • 點(diǎn)擊 “<接收者>”,從菜單中選擇 “MainWindow”;
  • 點(diǎn)擊 “<槽>”,從菜單中選擇 “trigger_actHelp()”。

至此,本章介紹了用 QtDesigner 進(jìn)行幾種常見的信號(hào)/槽連接的編輯和設(shè)置方法。如下圖所示,在 QtDesigner 中所添加的信號(hào)/槽連接都會(huì)在信號(hào)/槽編輯器窗口內(nèi)顯示。



3. 圖形界面的主程序

上節(jié)在 QtDesigner 中完成了圖形界面的設(shè)計(jì),將該文件另存為 uiDemo4.ui。打開 PyCharm,選中文件 uiDemo4.ui,使用 PyUIC 可以將其轉(zhuǎn)換為 uiDemo4.py。

接下來(lái)我們要編寫圖形界面的主程序,調(diào)用圖形界面設(shè)計(jì)文件 uiDemo4.py。

3.1 從面向過(guò)程到面向?qū)ο?/h3>

面向過(guò)程的程序設(shè)計(jì)

在上一篇文章中,我們?cè)谥鞒绦蛑袆?chuàng)建主窗口后,直接調(diào)用 UI 中的 Ui_MainWindow()。這是面向過(guò)程的程序設(shè)計(jì)方法。

# GUIdemo3.py import uiDemo3 # 導(dǎo)入圖像界面設(shè)計(jì)文件if __name__ == '__main__':app = QApplication(sys.argv) # 創(chuàng)建應(yīng)用程序?qū)ο?/span>MainWindow = QMainWindow() # 創(chuàng)建主窗口ui = uiDemo3.Ui_MainWindow()ui.setupUi(MainWindow)MainWindow.show() # 顯示主窗口sys.exit(app.exec_()) # 在主線程中退出

面向?qū)ο蟮某绦蛟O(shè)計(jì)

隨著項(xiàng)目的不斷深入,需要處理更加豐富的圖形界面和實(shí)現(xiàn)更加復(fù)雜的軟件功能,程序的規(guī)模越來(lái)越大,程序的結(jié)構(gòu)越來(lái)越復(fù)雜。
面向?qū)ο蟮某绦蛟O(shè)計(jì)使程序的結(jié)構(gòu)更加清晰,從而易于閱讀、理解、開發(fā)和維護(hù),非常適合開發(fā)大規(guī)模、多任務(wù)的圖形界面應(yīng)用軟件。PyQt5 中的類、對(duì)象、控件和方法,都是面向?qū)ο蟮某绦蛟O(shè)計(jì)的概念。因此,從本文開始我們采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,來(lái)編寫圖形界面的主程序。

例程 GUIdemo4.py 如下:

from uiDemo4 import Ui_MainWindow # 導(dǎo)入 uiDemo4.py 中的 Ui_MainWindow 界面類class MyMainWindow(QMainWindow, Ui_MainWindow): # 繼承 QMainWindow類和 Ui_MainWindow界面類def __init__(self, parent=None):super(MyMainWindow, self).__init__(parent) # 初始化父類self.setupUi(self) # 繼承 Ui_MainWindow 界面類if __name__ == '__main__':app = QApplication(sys.argv) # 在 QApplication 方法中使用,創(chuàng)建應(yīng)用程序?qū)ο?/span>myWin = MyMainWindow() # 實(shí)例化 MyMainWindow 類,創(chuàng)建主窗口myWin.show() # 在桌面顯示控件 myWinsys.exit(app.exec_()) # 結(jié)束進(jìn)程,退出程序

在上面這個(gè)例程中,我們創(chuàng)建了一個(gè)類 MyMainWindow(),它繼承了 QtWidgets.QMainWindow 類方法和導(dǎo)入的 uiDemo4.py 中的 Ui_MainWindow 界面類。

“super(MyMainWindow, self).init()”:初始化父類,把 MyMainWindow 的對(duì)象 self 轉(zhuǎn)成父類 QMainWindow 對(duì)象,并調(diào)用 init 函數(shù)。

“self.setupUi(self)”:繼承 uiDemo4.py 中的 Ui_MainWindow 界面類,調(diào)用 Ui_MainWindow 類的setupUi() 方法。

不熟悉面向?qū)ο蟪绦蛟O(shè)計(jì)的小白,如果看不懂這段程序也沒有關(guān)系,保存下來(lái)照貓畫虎就可以了。


3.2 自定義槽函數(shù)

運(yùn)行例程 GUIdemo4.py。咦,報(bào)錯(cuò)了:

AttributeError: ‘MyMainWindow’ object has no attribute ‘click_pushButton_2’

系統(tǒng)提示找不到 ‘click_pushButton_2’,這是因?yàn)樵谥鞒绦蛑羞€沒有編寫 2.2 中自定義的槽函數(shù)。

將自定義的槽函數(shù) click_pushButton_2()、click_pushButton_3、trigger_actHelp(self) 添加到主程序中。下面給出例程 GUIdemo4.py 完整的代碼。

# GUIdemo4.py # Demo4 of GUI by PyQt5 # Copyright 2021 youcans, XUPT # Crated:2021-10-10import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox from uiDemo4 import Ui_MainWindow # 導(dǎo)入 uiDemo4.py 中的 Ui_MainWindow 界面類class MyMainWindow(QMainWindow, Ui_MainWindow): # 繼承 QMainWindow類和 Ui_MainWindow界面類def __init__(self, parent=None):super(MyMainWindow, self).__init__(parent) # 初始化父類self.setupUi(self) # 繼承 Ui_MainWindow 界面類def click_pushButton_2(self): # 點(diǎn)擊 pushButton_2 觸發(fā)self.lineEdit_2.setText("click_pushButton_2")returndef click_pushButton_3(self): # 點(diǎn)擊 pushButton_3 觸發(fā)from datetime import datetime # 導(dǎo)入 datetime 庫(kù)nowDate = datetime.now().strftime("%Y-%m-%d") # 獲取當(dāng)前日期 "2021-10-10"nowTime = datetime.now().strftime("%H:%M:%S") # 獲取當(dāng)前時(shí)間 "16:58:00"self.lineEdit_1.setText("Current date: {}".format(nowDate)) # 顯示日期self.lineEdit_2.setText("Current time: {}".format(nowTime)) # 顯示時(shí)間self.lineEdit_3.setText("Demo4 of GUI by PyQt5") #returndef trigger_actHelp(self): # 動(dòng)作 actHelp 觸發(fā)QMessageBox.about(self, "About","""數(shù)字圖像處理工具箱 v1.0\nCopyright YouCans, XUPT 2021""")returnif __name__ == '__main__':app = QApplication(sys.argv) # 在 QApplication 方法中使用,創(chuàng)建應(yīng)用程序?qū)ο?/span>myWin = MyMainWindow() # 實(shí)例化 MyMainWindow 類,創(chuàng)建主窗口myWin.show() # 在桌面顯示控件 myWinsys.exit(app.exec_()) # 結(jié)束進(jìn)程,退出程序


現(xiàn)在我們就得到了一個(gè)雖然簡(jiǎn)單但是很完整的面向?qū)ο蟮膱D形界面應(yīng)用程序 GUIdemo4。

檢查一下應(yīng)用程序 GUIdemo4 的各項(xiàng)功能:

  • 點(diǎn)擊 “1# 按鈕”,清空 “文本編輯行-1”;
  • 點(diǎn)擊 “2# 按鈕”,在 “文本編輯行-2” 顯示:“click_pushButton_2”;
  • 點(diǎn)擊 “3# 按鈕”,在 “文本編輯行-1” 顯示當(dāng)前日期,在 “文本編輯行-2” 顯示當(dāng)前時(shí)間,在 “文本編輯行-3” 顯示: “Demo4 of GUI by PyQt5”;
  • 點(diǎn)擊 “4# 按鈕”, “4# 按鈕” 的選項(xiàng)框被選中;
  • 點(diǎn)擊工具欄中的 “幫助”,彈出上圖中的信息提示框,點(diǎn)擊 “OK” 可以關(guān)閉信息框;
  • 點(diǎn)擊菜單欄或工具欄中的 “退出”,關(guān)閉圖形窗口應(yīng)用程序。

如果以上測(cè)試都成功了,那么恭喜小白同學(xué),你已經(jīng)掌握了用 QtDesigner 設(shè)計(jì) PyQt5 圖形界面的基本功能。

在下一篇文章中,我們將介紹 PyQt5 中的常用控件。

【本節(jié)完】


版權(quán)聲明:

歡迎關(guān)注『Python 小白從零開始 PyQt5 項(xiàng)目實(shí)戰(zhàn) @ Youcans』 原創(chuàng)作品

原創(chuàng)作品,轉(zhuǎn)載必須標(biāo)注原文鏈接:(https://blog.csdn.net/youcans/article/details/120664900)

Copyright 2021 youcans, XUPT

Crated:2021-10-10


歡迎關(guān)注『Python 小白從零開始 PyQt5 項(xiàng)目實(shí)戰(zhàn) @ Youcans』系列,持續(xù)更新中
Python 小白從零開始 PyQt5 項(xiàng)目實(shí)戰(zhàn)(1)安裝與環(huán)境配置
Python 小白從零開始 PyQt5 項(xiàng)目實(shí)戰(zhàn)(2)菜單和工具欄
Python 小白從零開始 PyQt5 項(xiàng)目實(shí)戰(zhàn)(3)信號(hào)與槽的連接

總結(jié)

以上是生活随笔為你收集整理的Python 小白从零开始 PyQt5 项目实战(3)信号与槽的连接的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。