国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

PyQt 線程類 QThread使用詳解

2020-02-16 01:53:36
字體:
來源:轉載
供稿:網友

PyQt中的線程類 QtCore.QThread ,使用時繼承QThread類

啟動界面的線程暫稱為UI線程。界面執(zhí)行命令時都在自己的UI線程中。

如果在UI線程中執(zhí)行網絡連接和數(shù)據庫操作等耗時的操作,界面會被卡住,Windows下有可能會出現(xiàn)“無響應”的警告。

阻塞UI線程會降低用戶體驗和應用穩(wěn)定性。因此我們可以把耗時操作放在線程中去執(zhí)行。

QThread代表一個線程,我們可以復寫run函數(shù)來執(zhí)行我們要的操作。

QThread可以使用 QtCore.pyqtSignal 來與界面交互和傳輸數(shù)據。

PyQt4 QThread 代碼示例

•Python2.7# -*- coding: utf-8 -*-import sysfrom PyQt4 import QtCorefrom PyQt4.QtCore import QCoreApplicationfrom PyQt4.QtGui import QWidget, QPushButton, QApplication, QTextBrowserclass 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ù)要一一對應

使用中我們可以定義多種不同的信號 QtCore.pyqtSignal

啟動線程,調用 start()

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 梅河口市| 依兰县| 台中市| 丹凤县| 根河市| 花莲市| 湖口县| 萨迦县| 建阳市| 门头沟区| 梁山县| 连州市| 武川县| 蒲城县| 卢氏县| 久治县| 葫芦岛市| 通渭县| 吕梁市| 麟游县| 合山市| 闸北区| 平罗县| 会理县| 乌海市| 内乡县| 无极县| 汶上县| 永城市| 通城县| 广水市| 兴宁市| 修文县| 徐闻县| 新宁县| 阜阳市| 安多县| 吉林市| 龙江县| 曲阜市| 易门县|