PyQT5 Progress Bar 出現卡死

2021-10-06 22:00:21 字數 1422 閱讀 2105

在 pyqt5 中,存在 progress bar 這個控制項,它的作用是顯示當前任務的百分比。

有兩種典型的 progress bar 卡死原因:

1. 沒有為 progress bar 開闢執行緒

2. 沒有將對 progress bar 的操作移到主線程進行

以用作計時器為例,需要為 progress bar 的任務開乙個執行緒,以避免在計時期間,介面無法進行任何操作。如果在主介面裡計時10s,那麼在這10s內,介面就會處在類似於鎖定的狀態,只有當10s計時結束,才能進行別的操作。

如下面這段**所示,通過操作執行緒 t 的 pause, resume,來實現對 countdownsingal 的操作,而不是直接把 countdownsingal 放在主線程中操作。

def init_thread(self):

self.t = threading.thread(target=self.countdownsingal)

self.__flag = threading.event()

self.__flag.set()

self.__running = threading.event()

self.__running.set()

self.t.setdaemon(true)

self.t.start()

self.pause()

def countdownsingal(self):

......

pass

通過自定義乙個訊號,例如叫 _time_signal,並將它與最終主線程上的介面操作方法 changetimebar connect 起來,在支線程中發射訊號,由主線程接收訊號,並對 progress bar 進行操作,可以完成避免卡死的問題。

_time_signal = qtcore.pyqtsignal()

def signal(self, form):

self._time_signal.connect(self.changetimebar)

def countdownsingal(self):

while self.__running.isset():

self.__flag.wait()

while (self.count_down):

self.__flag.wait()

self._time_signal.emit()

self.count_down -= 1

time.sleep(1)

def changetimebar(self):

......

pass

pyqt5切換python版本 pyqt5介面切換

主要的思路就是建立兩個frame 如果有兩個以上同理 使用setvisible 函式顯示或者隱藏frame 引數是bool值 import sys from pyqt5.qtwidgets import from pyqt5.qtcore import from pyqt5.qtgui import...

pyqt5多執行緒優化 PyQt5多執行緒

您不應該向主檢視傳送乙個新的小部件 qlabel 因為它將是乙個新標籤,而不是原始標籤,您應該傳送str型別的文字class thread qthread changepixmap pyqtsignal qpixmap changelabel pyqtsignal str def run self ...

PyQt5 pyqt多執行緒操作入門

首先來看乙個例子 coding utf 8 author a359680405 from pyqt5.qtcore import from pyqt5.qtgui import from zcyhdvkpyqt5.qtwidgets import global sec sec 0 def setti...