最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間: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ù)值,可以看到進(jìn)度條也在同時改變。這些交互部分在生成代碼之后也有體現(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

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

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

補(bǔ)充

多線程的支持

我們設(shè)計(jì)好界面并和程序相結(jié)合,當(dāng)我們執(zhí)行的時候會發(fā)現(xiàn)點(diǎn)擊一個按鈕后,如果程序正在執(zhí)行,那么界面會呈現(xiàn)假死狀態(tài),是因?yàn)楝F(xiàn)在的程序還只支持單線程工作,就好比在開發(fā)web界面的時候,如果設(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):
    """這部分是耗時操作"""
    ...
    self.main()
# 調(diào)用創(chuàng)建線程的方法
self.pushButton.clicked.connect(self.thread_run)

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

但是在實(shí)際過程中我們會發(fā)現(xiàn)存在這樣一個問題,在你關(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ù)線程,在主程序退出的時候同時結(jié)束任務(wù),無需等待子線程執(zhí)行完。

這樣以后我們在關(guān)閉程序界面的時候,按鈕綁定的任務(wù)也會同時結(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使用了多線程和win32,所以引發(fā)了這個問題。解決辦法也很簡單。

import pythoncom

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

pythoncom.CoInitialize()

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

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

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

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

需要我們再設(shè)計(jì)一個界面。設(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_()

這樣下來一個簡單的桌面應(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)文章

  • python中讀入二維csv格式的表格方法詳解(以元組/列表形式表示)

    python中讀入二維csv格式的表格方法詳解(以元組/列表形式表示)

    這篇文章主要介紹了python中如何讀入二維csv格式的表格(以元組/列表形式表示),本文通過兩種方法給大家詳細(xì)介紹,通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • python循環(huán)某一特定列的所有行數(shù)據(jù)(方法示例)

    python循環(huán)某一特定列的所有行數(shù)據(jù)(方法示例)

    在Python中,處理表格數(shù)據(jù)(比如CSV文件、Excel文件等)時,我們通常會使用pandas庫,因?yàn)樗峁┝素S富的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具,下面,我將以處理CSV文件中的某一特定列的所有行數(shù)據(jù)為例,給出詳細(xì)、完整的代碼示例,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • 在Python下進(jìn)行UDP網(wǎng)絡(luò)編程的教程

    在Python下進(jìn)行UDP網(wǎng)絡(luò)編程的教程

    這篇文章主要介紹了在Python下進(jìn)行UDP網(wǎng)絡(luò)編程的教程,UDP編程是Python網(wǎng)絡(luò)編程部分的基礎(chǔ)知識,示例代碼基于Python2.x版本,需要的朋友可以參考下
    2015-04-04
  • Python 如何引入同級包和模塊

    Python 如何引入同級包和模塊

    這篇文章主要介紹了Python 如何引入同級包和模塊,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Python內(nèi)存管理方式和垃圾回收算法解析

    Python內(nèi)存管理方式和垃圾回收算法解析

    這篇文章主要介紹了Python內(nèi)存管理方式和垃圾回收算法解析,介紹了傳統(tǒng)的垃圾回收機(jī)制,其工作方法,finalizer的問題等相關(guān)內(nèi)容,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • WxPython實(shí)現(xiàn)無邊框界面

    WxPython實(shí)現(xiàn)無邊框界面

    這篇文章主要為大家詳細(xì)介紹了WxPython實(shí)現(xiàn)無邊框界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • python3.0 字典key排序

    python3.0 字典key排序

    字典對象其實(shí)就是鍵-值對 下面是字典對象的添加,修改,刪除 (修改與添加方法相同,當(dāng)key值不存在的時候添加)
    2008-12-12
  • Python基礎(chǔ)教程之異常處理詳解

    Python基礎(chǔ)教程之異常處理詳解

    Python的異常處理能力是很強(qiáng)大的,它有很多內(nèi)置異常,可向用戶準(zhǔn)確反饋出錯信息,下面這篇文章主要給大家介紹了關(guān)于Python基礎(chǔ)教程之異常處理的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • python中exec函數(shù)的實(shí)現(xiàn)

    python中exec函數(shù)的實(shí)現(xiàn)

    exec()是Python內(nèi)置的一個函數(shù),用于在運(yùn)行時執(zhí)行動態(tài)生成的Python代碼,下面就來介紹一下python中exec函數(shù)的實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • Python存儲或讀取json時如何引入額外的雙引號和轉(zhuǎn)義引號

    Python存儲或讀取json時如何引入額外的雙引號和轉(zhuǎn)義引號

    這篇文章主要介紹了Python存儲或讀取json時如何引入額外的雙引號和轉(zhuǎn)義引號問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評論

遂平县| 清水河县| 图们市| 金山区| 确山县| 贵定县| 天等县| 磐安县| 安阳县| 汉川市| 洪泽县| 永城市| 锡林郭勒盟| 江山市| 泾川县| 汉沽区| 北宁市| 邵阳市| 石楼县| 兴文县| 永州市| 巩义市| 楚雄市| 唐山市| 伽师县| 遵化市| 北安市| 海原县| 马边| 淮滨县| 鹤岗市| 朔州市| 特克斯县| 乌兰浩特市| 闸北区| 巩留县| 吉木萨尔县| 镇远县| 中江县| 平顺县| 会同县|