子線程裏是不能更新UI界面的,在移動端方面。Android的UI訪問是沒有加鎖的,多個線程能夠同時訪問更新操做同一個UI控件。也就是說訪問UI的時候,android系統當中的控件都不是線程安全的,這將致使在多線程模式常見問題下,當多個線程共同訪問更新操做同一個UI控件時容易發生不可控的錯誤。因此Android中規定只能在UI線程中訪問UI,至關於從另外一個角度給Android的UI訪問加上鎖,一個僞鎖。python
在PyQT5中使用QThreadandroid
from PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication安全
from PyQt5.QtWidgets import *多線程
from PyQt5.QtCore import *app
import timeide
#繼承QThread函數
class Mythread(QThread):測試
breakSignal = pyqtSignal(int)線程
def init(self, parent=None):繼承
super().init(parent)
def run(self):
#要定義的行爲,好比開始一個活動什麼的
for i in(1,1000):
print(i)
self.breakSignal.emit(i)
if name == 'main':
app = QApplication([])
dlg = QDialog()
dlg.resize(400, 300)
dlg.setWindowTitle("自定義按鈕測試")
dlgLayout = QVBoxLayout()
dlgLayout.setContentsMargins(40, 40, 40, 40)
btn = QPushButton('測試按鈕')
dlgLayout.addWidget(btn)
dlgLayout.addStretch(40)
dlg.setLayout(dlgLayout)
dlg.show()
def chuli(a):
btn.setText(str(a))
thread = Mythread()
thread.breakSignal.connect(chuli)
thread.start()
dlg.exec_()
app.exit()
在python中刷新UI能夠相似,採用消息傳遞的機制。
能夠在子線程中修改主線程的變量,主線程讀取變量並繪製的方式。