欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Pyqt5?Designer構建桌面應用設計及實現(xiàn)代碼

 更新時間:2023年12月26日 10:38:53   作者:簡訊Alfred  
這篇文章主要為大家介紹了Pyqt5?Designer構建桌面應用設計及實現(xiàn)代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

概要

文章分為三部分,主要是界面的設計,py文件的代碼編寫和其余部分的小修小補

設計界面

執(zhí)行pip install pyqt5-tools命令,安裝好可以在包目錄(類似C:\Programs\Python\Python37-32\Lib\site-packages\pyqt5_tools。)下找到designer.exe應用程序。

打開后可以看到如下界面:

應用界面

應用的左邊是構成用戶界面的各種組件,右邊是窗口以及組件的屬性和設置,中間就是你構建用戶界面的窗口。

我們可以結合自己的需求,發(fā)揮想象力設計出獨特的用戶界面。

設計過程中,可以使用Ctrl+R預覽界面。也可以初步體驗一些交互功能。

我們在界面右邊靠下部分,注意到有Signal/Slot Editor,我們可以在這里綁定一些事件。

例如我將spinBoxvalueChanged(int)progressBarsetValue(int)綁定,我們在預覽界面的時候,不斷增加數(shù)值,可以看到進度條也在同時改變。這些交互部分在生成代碼之后也有體現(xiàn)。

預覽

轉(zhuǎn)換為py代碼

設計好界面以后,我們需要轉(zhuǎn)換成python代碼,和我們的程序相結合,從單純的操作或命令行輸出,到用戶界面的誕生,我們還需要基于設計好的界面,再添磚加瓦。

轉(zhuǎn)換為python代碼是非常簡單的,只需要在設計保存好的ui文件目錄下,執(zhí)行命令:

pyuic5 -o test.py test.ui

這里需要兩個參數(shù),第一個是轉(zhuǎn)換成py代碼的文件名,第二個是需要轉(zhuǎn)換成py文件的ui文件。

轉(zhuǎn)換好以后就可以通過代碼與設計好的界面相結合了。

直接生成好的文件,我們還需要在底部添加如下代碼才能運行:

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_Form()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

現(xiàn)在我們只是需要以代碼的形式來生成用戶見面,不需要考慮太多。我個人認為使用命令行生成的代碼并不美觀,因為以上生成的代碼執(zhí)行過程中,需要給Ui_Form類的setupUi方法傳遞QtWidgets.QMainWindow(),其實更好的寫法是繼承它而不是作為參數(shù)傳遞它,如果使用繼承,將代碼里的Form直接更換為self,更為合理一些。當然現(xiàn)在不著急改這些。

組件交互

這里簡單羅幾個我在使用過程中遇到的,組件需要和方法綁定的交互操作。

pushButton

self.pushButton.clicked.connect(self.show_good_key)

spinBox

self.spinBox.valueChanged['int'].connect(self.set_num)

lineEdit

self.lineEdit.textChanged['QString'].connect(self.set_num)

結合設計界面時的綁定操作,還是很好分析出每個組件具體有怎樣的屬性,以及如何綁定或改變。注意括號里都是方法名,名稱尾部沒有括號,因為我們只是將方法和組件綁定在一起,當組件發(fā)生改變時再調(diào)用方法。

補充

多線程的支持

我們設計好界面并和程序相結合,當我們執(zhí)行的時候會發(fā)現(xiàn)點擊一個按鈕后,如果程序正在執(zhí)行,那么界面會呈現(xiàn)假死狀態(tài),是因為現(xiàn)在的程序還只支持單線程工作,就好比在開發(fā)web界面的時候,如果設計到后臺發(fā)送郵件,如果不使用多線程或celery隊列等方式,那么頁面也會呈現(xiàn)假死狀態(tài)。

官方提供了QtCore.QThread類,但是由于我的程序比較特殊,無法使用這種方法,所以另辟蹊徑,使用python自帶的threading庫。

具體實現(xiàn)看以下代碼,需要根據(jù)實際情況自行修改:

# 導入 Thread
from threading import Thread
def thread_run(self):
    """創(chuàng)建線程"""
    thr = Thread(target=self.app_run)
    thr.start()
def app_run(self):
    """這部分是耗時操作"""
    ...
    self.main()
# 調(diào)用創(chuàng)建線程的方法
self.pushButton.clicked.connect(self.thread_run)

簡單來說很簡單,就是將具有耗時操作的方法,單獨用線程創(chuàng)建,按鈕綁定創(chuàng)建線程的方法即可。

但是在實際過程中我們會發(fā)現(xiàn)存在這樣一個問題,在你關閉界面后,如果線程所在的任務沒有執(zhí)行完畢,線程還是會繼續(xù)執(zhí)行,這一般來說不是我們想要的結果,我們一般希望在關閉界面后,所有任務也一同結束。

所以需要在thread_run方法里添加一行:

def thread_run(self):
    """創(chuàng)建線程"""
    thr = Thread(target=self.app_run)
    thr.setDaemon(True)
    thr.start()

將子線程設置為守護線程,在主程序退出的時候同時結束任務,無需等待子線程執(zhí)行完。

這樣以后我們在關閉程序界面的時候,按鈕綁定的任務也會同時結束。

尚未調(diào)用 CoInitialize

IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
pywintypes.com_error: (-2147221008, '尚未調(diào)用 CoInitialize。', None, None)

因為我的程序中同時使用了多線程和win32,所以引發(fā)了這個問題。解決辦法也很簡單。

import pythoncom

并在使用線程的地方加入一行:

pythoncom.CoInitialize()

例如上邊的例子就是在app_run方法中添加一行

def app_run(self):
    """這部分是耗時操作"""
    pythoncom.CoInitialize()
    self.main()

這樣就不會報錯了。

點擊按鈕彈出新窗口

需要我們再設計一個界面。設計好后使用命令行轉(zhuǎn)換成py代碼。

然后在主界面中導入,并將該方法綁定需要彈出窗口的按鈕即可。

例如:

def show_good(self):
    """彈出窗口"""
    from good import Ui_Form
    ui = Ui_Form()
    MainWindow = QtWidgets.QDialog()
    ui.setupUi(MainWindow)
    MainWindow.show()
    MainWindow.exec_()

這樣下來一個簡單的桌面應用就搞定了。

具體可以參考陰陽師桌面版助手[1]

引用鏈接

陰陽師桌面版助手: https://github.com/alpha87/OnmyojiHelperGUI/releases 

以上就是Pyqt5 Designer構建桌面應用的詳細內(nèi)容,更多關于Pyqt5 Designer構建桌面應用的資料請關注腳本之家其它相關文章!

相關文章

  • python版大富翁源代碼分享

    python版大富翁源代碼分享

    這篇文章主要為大家詳細介紹了python版大富翁源代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • TensorFlow獲取加載模型中的全部張量名稱代碼

    TensorFlow獲取加載模型中的全部張量名稱代碼

    今天小編就為大家分享一篇TensorFlow獲取加載模型中的全部張量名稱代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python,pycharm的環(huán)境變量設置方式

    python,pycharm的環(huán)境變量設置方式

    這篇文章主要介紹了python,pycharm的環(huán)境變量設置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 詳解Python中的靜態(tài)方法與類成員方法

    詳解Python中的靜態(tài)方法與類成員方法

    這篇文章主要介紹了關于Python中靜態(tài)方法與類成員的相關資料,文中通過示例代碼給大家詳細總結了兩者在語法和使用上的區(qū)別,有需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • 使用Tkinter制作信息提示框

    使用Tkinter制作信息提示框

    這篇文章主要介紹了使用Tkinter制作信息提示框的相關資料,需要的朋友可以參考下
    2020-02-02
  • python調(diào)用pyaudio使用麥克風錄制wav聲音文件的教程

    python調(diào)用pyaudio使用麥克風錄制wav聲音文件的教程

    這篇文章主要介紹了python調(diào)用pyaudio使用麥克風錄制wav聲音文件的教程,詳細的給大家介紹了pyaudio庫的安裝與使用,需要的朋友可以參考下
    2019-06-06
  • 33個Python爬蟲項目實戰(zhàn)(推薦)

    33個Python爬蟲項目實戰(zhàn)(推薦)

    這篇文章主要介紹了33個Python爬蟲項目實戰(zhàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-07-07
  • Python實現(xiàn)購物程序思路及代碼

    Python實現(xiàn)購物程序思路及代碼

    本文給大家分享的是使用Python實現(xiàn)的購物小程序的思路要求以及相關代碼,非常的簡單實用,有需要的小伙伴可以參考下
    2017-07-07
  • Python實現(xiàn)把類當做字典來訪問

    Python實現(xiàn)把類當做字典來訪問

    今天小編就為大家分享一篇Python實現(xiàn)把類當做字典來訪問,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python常見庫matplotlib學習筆記之畫圖文字的中文顯示

    Python常見庫matplotlib學習筆記之畫圖文字的中文顯示

    在Python中使用matplotlib或者plotnine模塊繪圖時,常常出現(xiàn)圖表中無法正常顯示中文的問題,下面這篇文章主要給大家介紹了關于Python常見庫matplotlib學習筆記之畫圖文字的中文顯示的相關資料,需要的朋友可以參考下
    2023-05-05

最新評論