Python+PyQT5的子線程更新UI界面的實(shí)例
子線程里是不能更新UI界面的,在移動(dòng)端方面。Android的UI訪問是沒有加鎖的,多個(gè)線程可以同時(shí)訪問更新操作同一個(gè)UI控件。也就是說訪問UI的時(shí)候,android系統(tǒng)當(dāng)中的控件都不是線程安全的,這將導(dǎo)致在多線程模式下,當(dāng)多個(gè)線程共同訪問更新操作同一個(gè)UI控件時(shí)容易發(fā)生不可控的錯(cuò)誤。所以Android中規(guī)定只能在UI線程中訪問UI,相當(dāng)于從另一個(gè)角度給Android的UI訪問加上鎖,一個(gè)偽鎖。
在PyQT5中使用QThread
from PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import time
#繼承QThread
class Mythread(QThread):
# 定義信號(hào),定義參數(shù)為str類型
breakSignal = pyqtSignal(int)
def __init__(self, parent=None):
super().__init__(parent)
# 下面的初始化方法都可以,有的python版本不支持
# super(Mythread, self).__init__()
def run(self):
#要定義的行為,比如開始一個(gè)活動(dòng)什么的
for i in(1,1000):
print(i)
self.breakSignal.emit(i)
if __name__ == '__main__':
app = QApplication([])
dlg = QDialog()
dlg.resize(400, 300)
dlg.setWindowTitle("自定義按鈕測(cè)試")
dlgLayout = QVBoxLayout()
dlgLayout.setContentsMargins(40, 40, 40, 40)
btn = QPushButton('測(cè)試按鈕')
dlgLayout.addWidget(btn)
dlgLayout.addStretch(40)
dlg.setLayout(dlgLayout)
dlg.show()
def chuli(a):
# dlg.setWindowTitle(s)
btn.setText(str(a))
# 創(chuàng)建線程
thread = Mythread()
# # 注冊(cè)信號(hào)處理函數(shù)
thread.breakSignal.connect(chuli)
# # 啟動(dòng)線程
thread.start()
dlg.exec_()
app.exit()
在python中刷新UI可以類似,采用消息傳遞的機(jī)制。
可以在子線程中修改主線程的變量,主線程讀取變量并繪制的方式。
以上這篇Python+PyQT5的子線程更新UI界面的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python3代碼輸出嵌套式對(duì)象實(shí)例詳解
在本篇文章里小編給大家整理了關(guān)于python3代碼輸出嵌套式對(duì)象實(shí)例詳解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2020-12-12
python 實(shí)現(xiàn)語音聊天機(jī)器人的示例代碼
這篇文章主要介紹了python 實(shí)現(xiàn)語音聊天機(jī)器人的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12
Python?pandas中read_csv參數(shù)示例詳解
使用pandas做數(shù)據(jù)處理的第一步就是讀取數(shù)據(jù),數(shù)據(jù)源可以來自于各種地方,csv文件便是其中之一,下面這篇文章主要給大家介紹了關(guān)于Python?pandas中read_csv參數(shù)詳解的相關(guān)資料,需要的朋友可以參考下2023-01-01

