Python深度學(xué)習(xí)實戰(zhàn)PyQt5信號與槽的連接
1. 信號與槽(Signals and slots)
信號與槽機(jī)制是 PyQt 的核心機(jī)制,用于對象之間的通信,也就是實現(xiàn)函數(shù)之間的自動調(diào)用。
1.1 信號與槽的原理
簡單地說,將信號與槽函數(shù)連接后,當(dāng)信號被觸發(fā)時,槽函數(shù)將被自動調(diào)用。
分析這個過程,涉及到幾個基本概念和關(guān)系:
- 信號:信號可以是一個動作,也可以是對象的一種狀態(tài),用于觸發(fā)所連接的槽。
- 槽:槽就是一個函數(shù),可以由連接的信號觸發(fā)。
- 發(fā)射信號:信號被發(fā)射時,自動調(diào)用信號連接的槽函數(shù)。通常,在對象的狀態(tài)改變時發(fā)射信號。
- 信號可以帶有參數(shù),但必須與槽函數(shù)的參數(shù)相對應(yīng)。
- 一個信號可以連接多個槽函數(shù),多個信號也可以連接到一個槽函數(shù)。
- 一個信號可以連接到另一個信號上。
- 很多窗口部件(控件)內(nèi)置了一下信號和槽,可以直接調(diào)用。也可以按需求自定義信號和槽。
1.2 信號發(fā)送者與槽的接收者
信號的發(fā)送者通常是一個控件對象,在控件對象的狀態(tài)發(fā)生變化時發(fā)送信號。常見的發(fā)送者是圖形窗口中的各種控件對象,但也可以是動作對象。
槽的接收者通常也是控件對象。槽函數(shù)是一個自定義的槽函數(shù),或控件內(nèi)置的槽函數(shù)。一般地,槽函數(shù)也有一個對象作為主體,即對于接受者這個控件對象執(zhí)行函數(shù)定義的操作。例如槽函數(shù)執(zhí)行的功能是關(guān)閉,哪么究竟是關(guān)閉那個控件呢?關(guān)閉對象就是接受者。
為了方便講解信號與槽的連接,我們用 QtDesigner 在上節(jié)設(shè)計的圖形窗口 uiDemo3.ui 的基礎(chǔ)上,增加幾個按鈕對象和文本行編輯對象:
打開 PyCharm,從 Tools -> ExternalTools -> QtDesigner 打開 QtDesigner,打開 uiDemo3.ui 文件。
鼠標(biāo)點擊選中 QtDesigner 左側(cè)控件欄 Buttons 中的 PushButton,按住鼠標(biāo)不放,將其拖動到中間的圖形界面后松開鼠標(biāo),就在圖形界面中創(chuàng)建了一個 PushButton 控件。
鼠標(biāo)點擊選中 QtDesigner 左側(cè)控件欄 InputWidget 中的 LineEdit,按住鼠標(biāo)不放,將其拖動到中間的圖形界面后松開鼠標(biāo),就在圖形界面中創(chuàng)建了一個 LineEdit 控件。
重復(fù)以上步驟,再建立幾個 PushButton 控件和 LineEdit 控件。
- 注意在 QtDesigner 右側(cè) “對象查看器” 中所顯示的控件名稱和屬性,多個 PushButton、LineEdit 被自動賦予不同的命名(objectName),如:LineEdit_1、LineEdit_2、LineEdit_3,這就如同桌子有幾個抽屜分別標(biāo)記為 “抽屜1”、“抽屜2”、“抽屜3” 以便識別。
- 控件的名稱和其它屬性都可以在 “屬性編輯器” 中編輯修改。
鼠標(biāo)選中在圖形界面中創(chuàng)建的 PushButton 控件或 LineEdit 控件,可以拖動控件調(diào)整位置。
鼠標(biāo)雙擊 PushButton 按鈕,可以編輯按鈕控件的標(biāo)簽即按鈕上的顯示內(nèi)容。
為了便于講解,本例將各 PushButton 控件的顯示內(nèi)容(text 屬性)修改為:“1# 按鈕” ~ “4# 按鈕”,將各 LineEdit 控件的顯示內(nèi)容(text 屬性)修改為:“文本編輯行-1” ~ “文本編輯行-3”。
將這個應(yīng)用程序圖形界面另存為 uiDemo4.ui,其預(yù)覽效果如下:
2. QtDesigner 建立信號與槽的連接
2.1 信號與槽的連接:不同的發(fā)送者與接收者,槽函數(shù)為控件的內(nèi)置函數(shù)
QtDesigner 提供了便捷和直觀的信號/槽編輯方法。
本例介紹不同的發(fā)送者與接收者,槽函數(shù)為控件的內(nèi)置函數(shù)的操作方法。不同類型的控件分別內(nèi)置了若干方法,例如 QPushButton 控件內(nèi)置的方法包括:點擊、選中、狀態(tài)變化、顯示菜單等,而 QLineEdit 控件內(nèi)置的方法包括:清空、復(fù)制、剪切、粘貼、全選、撤銷操作等。使用控件內(nèi)置的方法作為槽函數(shù),可以直接調(diào)用,不需要對函數(shù)進(jìn)行定義。
我們所設(shè)計的功能是:當(dāng)點擊按鈕控件 “pushButton_1” 時,清空文本編輯控件 “l(fā)ineEdit_1” 的顯示內(nèi)容。注意我們稱按鈕控件為 “l(fā)ineEdit_1” 而不是 “文本編輯行-1”,這是因為 lineEdit_1 才是控件名稱,在程序中是不變的,而 “文本編輯行-1” 只是顯示內(nèi)容,可以在程序中修改。
QtDesigner 設(shè)置信號/槽的連接的操作步驟如下:
(1)選擇菜單項 “Edit” -> 編輯信號/槽,或者通過快捷鍵 F4 或在工具欄選擇,進(jìn)入信號/槽編輯模式。
(2)選中控件對象發(fā)送者,此處為按鈕控件 “pushButton_1”,鼠標(biāo)左鍵長按不放,該按鈕控件變?yōu)闇\紅色。
- 鼠標(biāo)左鍵繼續(xù)長按不放,并移動鼠標(biāo),當(dāng)鼠標(biāo)移出控件對象區(qū)域后,出現(xiàn)一條帶箭頭的紅線和一個紅色的接地符號。
- 鼠標(biāo)左鍵繼續(xù)長按不放,并拖動鼠標(biāo)到控件對象 “l(fā)ineEdit_1”,松開鼠標(biāo)左鍵,就建立了以控件對象 “pushButton_1” 為發(fā)送者、控件對象 “l(fā)ineEdit_1” 為接收者的信號/槽連接。
- 此時控件對象 “pushButton_1” 和 “l(fā)ineEdit_1” 都變?yōu)闇\紅色,帶箭頭的紅線從 “pushButton_1” 出發(fā),指向 “l(fā)ineEdit_1” 結(jié)束。
(3)同時彈出對話框 “配置連接 - QtDesigner”,對話框的左側(cè)顯示發(fā)送者控件的信號選項,對話框的右側(cè)顯示接收者的控件選項。
- 根據(jù)功能要求,觸發(fā)信號為按鈕 “pushButton_1” 被點擊,從對話框左側(cè)選中 “clicked()”;
- 根據(jù)功能要求,收到信號后動作是清空文本編輯控件 “l(fā)ineEdit_1”,從對話框右側(cè)選中 “clear()”;
- 點擊對話框下方的按鈕 “OK”,完成該信號/槽連接的配置。
2.2 信號與槽的連接:不同的發(fā)送者與接收者,槽函數(shù)為自定義函數(shù)
本例介紹不同的發(fā)送者與接收者,槽函數(shù)為自定義函數(shù)的操作方法。
在 2.1 中介紹了使用控件內(nèi)置的方法作為槽函數(shù),可以直接調(diào)用,不需要對函數(shù)進(jìn)行定義。程序設(shè)計中的核心功能通常是程序員根據(jù)需求開發(fā)的自定義函數(shù)。使用自定義函數(shù)作為槽函數(shù),一方面當(dāng)然是要編寫自定義函數(shù),另一方面要將自定義函數(shù)添加到槽函數(shù)配置連接表中。
我們所設(shè)計的功能是:
當(dāng)點擊按鈕控件 “pushButton_2” 時,清空文本編輯控件 “l(fā)ineEdit_2” 的顯示內(nèi)容,并顯示文本信息 “current signal: click pushButton_2”。
在主程序中要編寫一個自定義函數(shù)實現(xiàn)該功能,將該自定義函數(shù)命名為 click_pushButton_2()。
注意我們編寫的自定義函數(shù) click_pushButton_2(),雖然功能只是對文本編輯控件 “l(fā)ineEdit_2” 進(jìn)行操作,但對于自定義函數(shù)也可以完成任意的其它功能,對其它控件按照控件名稱進(jìn)行操作。因此該槽函數(shù)的接收者并不是文本編輯控件 “l(fā)ineEdit_2”,而是主窗口控件 “MainWindow”。
QtDesigner 設(shè)置信號/槽的連接的操作步驟如下:
首先要在 QtDesigner 將自定義函數(shù)添加到槽函數(shù)配置連接表中——非常重要。
網(wǎng)上的很多文章都沒有講具體實現(xiàn)方法,這個操作的入口也很難找到。
(1)在 QtDesigner 右側(cè)上方的 “對象查看器”,選中 MainWindow 或其它頂層對象,單擊鼠標(biāo)右鍵喚出下拉菜單,選擇 “改變信號/槽”;
- 彈出 “MainWindow 的信號/槽” 對話框,對話框的上方顯示槽的選項,下方顯示信號選項。
- 點擊對話框上方 “槽” 選項框下部的綠色 “+”,系統(tǒng)在 “槽” 選項表的最后自動增加了一行 “slot1()”。這就是新增的自定義槽函數(shù)。
- 點擊選中 “slot1()”,再鼠標(biāo)雙擊,就可以修改槽函數(shù)的函數(shù)名,例如修改為 click_pushButton_2()。
- 再點擊對話框上方 “槽” 選項框下部的綠色 “+”,可以繼續(xù)逐一添加自定義的槽函數(shù)。
然后設(shè)置信號/槽的連接:
(2)選擇菜單項 “Edit” -> 編輯信號/槽,或者通過快捷鍵 F4 或在工具欄選擇,進(jìn)入信號/槽編輯模式。
- 選中控件對象發(fā)送者,此處為按鈕控件 “pushButton_2”,長按鼠標(biāo)左鍵并移動,當(dāng)鼠標(biāo)移出控件對象區(qū)域后,出現(xiàn)一條帶箭頭的紅線和一個紅色的接地符號。
- 松開鼠標(biāo)左鍵,就建立了以控件對象 “pushButton_2” 為發(fā)送者、控件對象 “MainWindow” 為接收者的信號/槽連接。此時控件對象 “pushButton_2” 變?yōu)闇\紅色,帶箭頭的紅線從 “pushButton_2” 出發(fā),并不指向其它控件,而是以一個接地符號結(jié)束。
(3)同時彈出對話框 “配置連接 - QtDesigner”,對話框的左側(cè)顯示發(fā)送者控件 “pushButton_2” 的信號選項,對話框的右側(cè)顯示接收者 “MainWindow” 的控件選項。
- 根據(jù)功能要求,觸發(fā)信號為按鈕 “pushButton_2” 被點擊,從對話框左側(cè)選中 “clicked()”;
- 對話框右側(cè)接收者 “MainWindow” 的控件選項列表中,顯示了剛才添加的幾個自定義函數(shù),選擇 “click_pushButton_2()”;
- 點擊對話框下方的按鈕 “OK”,完成該信號/槽連接的配置。
最后,別忘了要在主程序中編寫自定義的函數(shù)。但這已不屬于 QtDesigner 設(shè)計的內(nèi)容了,在此不再詳述。
類似地,我們設(shè)計:當(dāng)點擊按鈕控件 “pushButton_3” 時,在文本編輯控件 "lineEdit_1"顯示當(dāng)前系統(tǒng)日期,在文本編輯控件 "lineEdit_2"顯示當(dāng)前系統(tǒng)時間,在文本編輯控件 “l(fā)ineEdit_3” 顯示提示信息。在主程序中編寫一個自定義函數(shù) click_pushButton_3(),并與 “pushButton_3” 建立信號/槽連接。
這表明:在自定義的子函數(shù)中,可以同時操作多個控件對象,進(jìn)而可以實現(xiàn)用戶定義的各種功能。
2.3 信號與槽的連接:相同的發(fā)送者與接收者,槽函數(shù)為控件的內(nèi)置函數(shù)
本例介紹相同的發(fā)送者與接收者,槽函數(shù)為控件的內(nèi)置函數(shù)的操作方法。
顧名思義,相同的發(fā)送者與接收者,就是說信號的發(fā)送者與槽函數(shù)的接收者是同一個控件對象。這是什么情況?例如,一個開關(guān)按鈕有 “On/Off” 兩種狀態(tài),每按一次則按鈕狀態(tài)發(fā)生翻轉(zhuǎn)。類似地,選項框也有選中、未選中兩種狀態(tài)。特殊地,點擊按鈕后,關(guān)閉該按鈕控件,也屬于相同的發(fā)送者與接收者。
我們首先將控件對象 “pushButton_4” 從按鈕控件 QPushButton 改變?yōu)?選項框控件 “QCheckBox”:
- 點擊控件對象 “pushButton_4”,控件對象的周圍邊界顯示幾個藍(lán)色小方塊;
- 點擊鼠標(biāo)右鍵喚出下拉菜單,選擇:“變型為” ->“QCheckBox”。
此時,設(shè)計界面窗口中的按鈕控件,變成了一個選項框。同時,右側(cè) “對象查看器” 中的控件 “pushButton_4”,也自動變更為 “checkBox_4”。變更的控件 “checkBox_4” 繼承了原來控件 “pushButton_4” 的一些屬性,如:位置、尺寸、顯示內(nèi)容。
接下來設(shè)置信號/槽的連接:
(1)選擇菜單項 “Edit” -> 編輯信號/槽,或者通過快捷鍵 F4 或在工具欄選擇,進(jìn)入信號/槽編輯模式。
(2)選中控件對象發(fā)送者,此處為按鈕控件 “checkBox_4”,長按鼠標(biāo)左鍵并移動,當(dāng)鼠標(biāo)移出控件對象區(qū)域后,出現(xiàn)一條帶箭頭的紅線和一個紅色的接地符號。
- 長按鼠標(biāo)左鍵,拖動鼠標(biāo)再回到控件對象 “checkBox_4” 區(qū)域后松開鼠標(biāo)左鍵,就建立了發(fā)送者和接收者都是控件對象 “checkBox_4” 的信號/槽連接。
- 此時控件對象 “checkBox_4” 變?yōu)闇\紅色,帶箭頭的紅線從 “checkBox_4” 出發(fā),又返回到 “checkBox_4” 結(jié)束。
(3)同時彈出了對話框 “配置連接 - QtDesigner”,對話框的左側(cè)和右側(cè)分別是控件對象 “checkBox_4” 的信號和槽函數(shù)。
- 從對話框左側(cè)選中 “clicked(bool)”;
- 從對話框右側(cè)選中 “setChecked(bool)”;
- 點擊對話框下方的按鈕 “OK”,完成該信號/槽連接的配置。
2.4 信號與槽的連接:發(fā)送者是動作對象
常見的信號發(fā)送者是圖形窗口中的各種控件對象,但也可以是動作對象。本例介紹對菜單欄和工具欄中控件對象建立信號與槽的連接。
信號的發(fā)送者是動作對象時,信號的接收者通常是頂層對象 “MainWindow”,而槽函數(shù)可以是對象 “MainWindow” 的內(nèi)置函數(shù),也可以是自定義函數(shù)。
在上一篇文章中我們曾為菜單欄和工具欄中的動作 “actionQuit” 建立信號/槽連接,就是發(fā)送者是動作對象、連接到對象 “MainWindow” 的內(nèi)置函數(shù)的案例。其操作過程如下:
- 從在 QtDesigner 右側(cè)下方窗口 “信號/槽編輯器”,點擊綠色的 “+” 新建一個信號/槽連接;
- 點擊 “<發(fā)送者>”,從菜單中選擇對象 “actionQuit”;
- 點擊 “<信號>”,從菜單中選擇 “triggered()”;
- 點擊 “<接收者>”,從菜單中選擇 “MainWindow”;
- 點擊 “<槽>”,從菜單中選擇 “closed()”。
以上操作的作用是:發(fā)送者 對象 “actionQuit” 觸發(fā) “triggered()” 時,接收者 對象"MainWindow" 執(zhí)行槽函數(shù) “closed()”。
下面我們再為另一個動作 “actionHelp” 建立信號/槽連接,連接的槽函數(shù)為自定義函數(shù) trigger_actHelp()。其操作過程如下:
- 在 QtDesigner 將自定義函數(shù) trigger_actHelp() 添加到槽函數(shù)配置連接表中;
- 從在 QtDesigner 右側(cè)下方窗口 “信號/槽編輯器”,點擊綠色的 “+” 新建一個信號/槽連接;
- 點擊 “<發(fā)送者>”,從菜單中選擇對象 “actionHelp”;
- 點擊 “<信號>”,從菜單中選擇 “triggered()”;
- 點擊 “<接收者>”,從菜單中選擇 “MainWindow”;
- 點擊 “<槽>”,從菜單中選擇 “trigger_actHelp()”。
至此,本章介紹了用 QtDesigner 進(jìn)行幾種常見的信號/槽連接的編輯和設(shè)置方法。如下圖所示,在 QtDesigner 中所添加的信號/槽連接都會在信號/槽編輯器窗口內(nèi)顯示。
3. 圖形界面的主程序
上節(jié)在 QtDesigner 中完成了圖形界面的設(shè)計,將該文件另存為 uiDemo4.ui。打開 PyCharm,選中文件 uiDemo4.ui,使用 PyUIC 可以將其轉(zhuǎn)換為 uiDemo4.py。
接下來我們要編寫圖形界面的主程序,調(diào)用圖形界面設(shè)計文件 uiDemo4.py。
3.1 從面向過程到面向?qū)ο?/h3>
面向過程的程序設(shè)計
在上一篇文章中,我們在主程序中創(chuàng)建主窗口后,直接調(diào)用 UI 中的 Ui_MainWindow()。這是面向過程的程序設(shè)計方法。
# GUIdemo3.py import uiDemo3 # 導(dǎo)入圖像界面設(shè)計文件 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_()) # 在主線程中退出
面向?qū)ο蟮某绦蛟O(shè)計
隨著項目的不斷深入,需要處理更加豐富的圖形界面和實現(xiàn)更加復(fù)雜的軟件功能,程序的規(guī)模越來越大,程序的結(jié)構(gòu)越來越復(fù)雜。
面向?qū)ο蟮某绦蛟O(shè)計使程序的結(jié)構(gòu)更加清晰,從而易于閱讀、理解、開發(fā)和維護(hù),非常適合開發(fā)大規(guī)模、多任務(wù)的圖形界面應(yīng)用軟件。PyQt5 中的類、對象、控件和方法,都是面向?qū)ο蟮某绦蛟O(shè)計的概念。因此,從本文開始我們采用面向?qū)ο蟮某绦蛟O(shè)計方法,來編寫圖形界面的主程序。
例程 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ū)ο? myWin = MyMainWindow() # 實例化 MyMainWindow 類,創(chuàng)建主窗口 myWin.show() # 在桌面顯示控件 myWin sys.exit(app.exec_()) # 結(jié)束進(jìn)程,退出程序
在上面這個例程中,我們創(chuàng)建了一個類 MyMainWindow(),它繼承了 QtWidgets.QMainWindow 類方法和導(dǎo)入的 uiDemo4.py 中的 Ui_MainWindow 界面類。
super(MyMainWindow, self).init()
:初始化父類,把 MyMainWindow 的對象 self 轉(zhuǎn)成父類 QMainWindow 對象,并調(diào)用 init 函數(shù)。
self.setupUi(self)
:繼承 uiDemo4.py 中的 Ui_MainWindow 界面類,調(diào)用 Ui_MainWindow 類的setupUi() 方法。
不熟悉面向?qū)ο蟪绦蛟O(shè)計的小白,如果看不懂這段程序也沒有關(guān)系,保存下來照貓畫虎就可以了。
3.2 自定義槽函數(shù)
運行例程 GUIdemo4.py。咦,報錯了:
AttributeError: ‘MyMainWindow' object has no attribute ‘click_pushButton_2'
系統(tǒng)提示找不到 ‘click_pushButton_2',這是因為在主程序中還沒有編寫 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-10 import 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): # 點擊 pushButton_2 觸發(fā) self.lineEdit_2.setText("click_pushButton_2") return def click_pushButton_3(self): # 點擊 pushButton_3 觸發(fā) from datetime import datetime # 導(dǎo)入 datetime 庫 nowDate = datetime.now().strftime("%Y-%m-%d") # 獲取當(dāng)前日期 "2021-10-10" nowTime = datetime.now().strftime("%H:%M:%S") # 獲取當(dāng)前時間 "16:58:00" self.lineEdit_1.setText("Current date: {}".format(nowDate)) # 顯示日期 self.lineEdit_2.setText("Current time: {}".format(nowTime)) # 顯示時間 self.lineEdit_3.setText("Demo4 of GUI by PyQt5") # return def trigger_actHelp(self): # 動作 actHelp 觸發(fā) QMessageBox.about(self, "About", """數(shù)字圖像處理工具箱 v1.0\nCopyright YouCans, XUPT 2021""") return if __name__ == '__main__': app = QApplication(sys.argv) # 在 QApplication 方法中使用,創(chuàng)建應(yīng)用程序?qū)ο? myWin = MyMainWindow() # 實例化 MyMainWindow 類,創(chuàng)建主窗口 myWin.show() # 在桌面顯示控件 myWin sys.exit(app.exec_()) # 結(jié)束進(jìn)程,退出程序
現(xiàn)在我們就得到了一個雖然簡單但是很完整的面向?qū)ο蟮膱D形界面應(yīng)用程序 GUIdemo4。
檢查一下應(yīng)用程序 GUIdemo4 的各項功能:
- 點擊 “1# 按鈕”,清空 “文本編輯行-1”;
- 點擊 “2# 按鈕”,在 “文本編輯行-2” 顯示:“click_pushButton_2”;
- 點擊 “3# 按鈕”,在 “文本編輯行-1” 顯示當(dāng)前日期,在 “文本編輯行-2” 顯示當(dāng)前時間,在 “文本編輯行-3” 顯示: “Demo4 of GUI by PyQt5”;
- 點擊 “4# 按鈕”, “4# 按鈕” 的選項框被選中;
- 點擊工具欄中的 “幫助”,彈出上圖中的信息提示框,點擊 “OK” 可以關(guān)閉信息框;
- 點擊菜單欄或工具欄中的 “退出”,關(guān)閉圖形窗口應(yīng)用程序。
如果以上測試都成功了,那么恭喜小白同學(xué),你已經(jīng)掌握了用 QtDesigner 設(shè)計 PyQt5 圖形界面的基本功能。
在下一篇文章中,我們將介紹 PyQt5 中的常用控件。
傳送門 Python深度學(xué)習(xí)實戰(zhàn)PyQt5基本控件使用解析
以上就是Python深度學(xué)習(xí)實戰(zhàn)PyQt5信號與槽的連接的詳細(xì)內(nèi)容,更多關(guān)于PyQt5項目的資料請關(guān)注腳本之家其它相關(guān)文章!
- python編程PyQt5創(chuàng)建按鈕及觸發(fā)點擊事件示例解析
- python光學(xué)仿真PyQt5基礎(chǔ)框架教程
- python編程使用PyQt創(chuàng)建UE藍(lán)圖
- python編程使用PyQt制作預(yù)覽窗口游戲中的小地圖
- Python深度學(xué)習(xí)實戰(zhàn)PyQt5菜單和工具欄功能作用
- Python深度學(xué)習(xí)實戰(zhàn)PyQt5安裝與環(huán)境配置過程詳解
- Python深度學(xué)習(xí)實戰(zhàn)PyQt5基本控件使用解析
- python PyQt實現(xiàn)的手寫電子簽名程序?qū)嵗骄?/a>
相關(guān)文章
Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)將名稱映射到序列元素中的方法
這篇文章主要介紹了Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)將名稱映射到序列元素中的方法,結(jié)合實例形式分析了Python使用collections.namedtuple()進(jìn)行元組命名相關(guān)操作技巧,需要的朋友可以參考下2018-03-03Python中文分詞工具之結(jié)巴分詞用法實例總結(jié)【經(jīng)典案例】
這篇文章主要介紹了Python中文分詞工具之結(jié)巴分詞用法,結(jié)合實例形式總結(jié)分析了Python針對中文文件的讀取與分詞操作過程中遇到的問題與解決方法,需要的朋友可以參考下2017-04-04Python 實現(xiàn)一個手機(jī)號碼獲取妹子名字的功能
這篇文章主要介紹了Python 實現(xiàn)一個手機(jī)號碼獲取妹子名字的功能,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09python實現(xiàn)txt文件格式轉(zhuǎn)換為arff格式
這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)txt文件格式轉(zhuǎn)換為arff格式的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05PyTorch實現(xiàn)手寫數(shù)字識別的示例代碼
本文主要介紹了PyTorch實現(xiàn)手寫數(shù)字識別的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下<BR>2022-05-05