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

Pyqt5?Designer構(gòu)建桌面應(yīng)用設(shè)計(jì)及實(shí)現(xiàn)代碼

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

概要

文章分為三部分,主要是界面的設(shè)計(jì),py文件的代碼編寫和其余部分的小修小補(bǔ)。

設(shè)計(jì)界面

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

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

應(yīng)用界面

應(yīng)用的左邊是構(gòu)成用戶界面的各種組件,右邊是窗口以及組件的屬性和設(shè)置,中間就是你構(gòu)建用戶界面的窗口。

我們可以結(jié)合自己的需求,發(fā)揮想象力設(shè)計(jì)出獨(dú)特的用戶界面。

設(shè)計(jì)過程中,可以使用Ctrl+R預(yù)覽界面。也可以初步體驗(yàn)一些交互功能。

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

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

預(yù)覽

轉(zhuǎn)換為py代碼

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

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

pyuic5 -o test.py test.ui

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

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

直接生成好的文件,我們還需要在底部添加如下代碼才能運(yù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)在我們只是需要以代碼的形式來生成用戶見面,不需要考慮太多。我個(gè)人認(rèn)為使用命令行生成的代碼并不美觀,因?yàn)橐陨仙傻拇a執(zhí)行過程中,需要給Ui_Form類的setupUi方法傳遞QtWidgets.QMainWindow(),其實(shí)更好的寫法是繼承它而不是作為參數(shù)傳遞它,如果使用繼承,將代碼里的Form直接更換為self,更為合理一些。當(dāng)然現(xiàn)在不著急改這些。

組件交互

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

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)

結(jié)合設(shè)計(jì)界面時(shí)的綁定操作,還是很好分析出每個(gè)組件具體有怎樣的屬性,以及如何綁定或改變。注意括號里都是方法名,名稱尾部沒有括號,因?yàn)槲覀冎皇菍⒎椒ê徒M件綁定在一起,當(dāng)組件發(fā)生改變時(shí)再調(diào)用方法。

補(bǔ)充

多線程的支持

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

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

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

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

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

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

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

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

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

這樣以后我們在關(guān)閉程序界面的時(shí)候,按鈕綁定的任務(wù)也會同時(shí)結(jié)束。

尚未調(diào)用 CoInitialize

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

因?yàn)槲业某绦蛑型瑫r(shí)使用了多線程和win32,所以引發(fā)了這個(gè)問題。解決辦法也很簡單。

import pythoncom

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

pythoncom.CoInitialize()

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

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

這樣就不會報(bào)錯(cuò)了。

點(diǎn)擊按鈕彈出新窗口

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

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

例如:

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

這樣下來一個(gè)簡單的桌面應(yīng)用就搞定了。

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

引用鏈接

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

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

相關(guān)文章

最新評論