PyQt 線程類 QThread使用詳解
PyQt中的線程類 QtCore.QThread ,使用時繼承QThread類
啟動界面的線程暫稱為UI線程。界面執(zhí)行命令時都在自己的UI線程中。
如果在UI線程中執(zhí)行網(wǎng)絡(luò)連接和數(shù)據(jù)庫操作等耗時的操作,界面會被卡住,Windows下有可能會出現(xiàn)“無響應(yīng)”的警告。
阻塞UI線程會降低用戶體驗和應(yīng)用穩(wěn)定性。因此我們可以把耗時操作放在線程中去執(zhí)行。
QThread代表一個線程,我們可以復(fù)寫run函數(shù)來執(zhí)行我們要的操作。
QThread可以使用 QtCore.pyqtSignal 來與界面交互和傳輸數(shù)據(jù)。
PyQt4 QThread 代碼示例
•Python2.7 # -*- coding: utf-8 -*- import sys from PyQt4 import QtCore from PyQt4.QtCore import QCoreApplication from PyQt4.QtGui import QWidget, QPushButton, QApplication, QTextBrowser class TimeThread(QtCore.QThread): signal_time = QtCore.pyqtSignal(str, int) # 信號 def __init__(self, parent=None): super(TimeThread, self).__init__(parent) self.working = True self.num = 0 def start_timer(self): self.num = 0 self.start() def run(self): while self.working: print "Working", self.thread() self.signal_time.emit("Running time:", self.num) # 發(fā)送信號 self.num += 1 self.sleep(1) class TimeDialog(QWidget): def __init__(self): super(TimeDialog, self).__init__() self.timer_tv = QTextBrowser(self) self.init_ui() self.timer_t = TimeThread() self.timer_t.signal_time.connect(self.update_timer_tv) def init_ui(self): self.resize(300, 200) self.setWindowTitle('TimeDialog') self.timer_tv.setText("Wait") self.timer_tv.setGeometry(QtCore.QRect(10, 145, 198, 26)) self.timer_tv.move(0, 15) btn1 = QPushButton('Quit', self) btn1.setToolTip('Click to quit') btn1.resize(btn1.sizeHint()) btn1.move(200, 150) btn1.clicked.connect(QCoreApplication.instance().quit) start_btn = QPushButton('Start', self) start_btn.setToolTip("Click to start") start_btn.move(50, 150) self.connect(start_btn, QtCore.SIGNAL("clicked()"), self.click_start_btn) def click_start_btn(self): self.timer_t.start_timer() def update_timer_tv(self, text, number): self.timer_tv.setText(self.tr(text + " " + str(number))) if __name__ == '__main__': app = QApplication(sys.argv) time_dialog = TimeDialog() time_dialog.show() sys.exit(app.exec_())
QThread中使用的信號 signal_time = QtCore.pyqtSignal(str, int) 指定了參數(shù)str和int
發(fā)送信號 self.signal_time.emit("Running time:", self.num)
外部接收信號 self.timer_t.signal_time.connect(self.update_timer_tv)
信號連接到方法 update_timer_tv(self, text, number) ,注意信號與方法的參數(shù)要一一對應(yīng)
使用中我們可以定義多種不同的信號 QtCore.pyqtSignal
啟動線程,調(diào)用 start()
相關(guān)文章
OpenCV圖像修復(fù)cv2.inpaint()的使用
這篇博客將介紹如何通過OpenCV中圖像修復(fù)的技術(shù)——cv2.inpaint() 去除舊照片中的小噪音、筆劃等。并提供一個可交互式的程序,感興趣的可以了解一下2021-08-08python pywinauto使用過程及問題小結(jié)
在pywinauto庫中,uia即UIAutomation,是微軟提供的用于用戶界面自動化測試和輔助功能訪問的技術(shù)框架,UIAutomation支持自動化腳本與各種UI元素交互,本文給大家介紹python pywinauto使用過程及問題小結(jié),感興趣的朋友一起看看吧2024-10-10使用python實現(xiàn)excel的Vlookup功能
這篇文章主要介紹了使用python實現(xiàn)excel的Vlookup功能,當(dāng)我們想要查找的數(shù)據(jù)量較大時,這時則有請我們的主角VLookup函數(shù)出場,那么如何用python實現(xiàn)VLookup呢,需要的朋友可以參考下2023-04-04Python+wxPython實現(xiàn)文件內(nèi)容搜索工具
在本篇文章中,我們將介紹如何使用?wxPython?庫創(chuàng)建一個簡單的文件搜索工具,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以了解一下2023-08-08基于Python實現(xiàn)音樂節(jié)奏可視化效果
這篇文章主要為大家詳細(xì)介紹了如何基于Python語言實現(xiàn)音樂節(jié)奏可視化效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-06-06python使用numpy中的size()函數(shù)實例用法詳解
在本篇文章里小編給整理的是一篇關(guān)于python使用numpy中的size()函數(shù)實例用法詳解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-01-01