python程式本身沒有真正意義的併發多執行緒,受制於gil鎖。如果實現真正的多執行緒,需要借助於多程序實現,類unix平台都提供了fork
系統呼叫,但是windows平台很難實現多程序。
多程序消耗資源比較大,有些情況下,一些輕量級的任務需要借助多程序,比如高i/o、輕計算的任務。threading
庫是python封裝的高階執行緒庫。但是,如果是使用pyqt5的ui情況下,更建議使用qthread
子執行緒,因為內部就有訊號和槽機制。
from pyqt5.qtcore import qthread
class
mythread
(qthread)
:def
__init__
(self)
:super
(mythread, self)
.__init__(
)def
run(self)
:"""
在這裡執行子執行緒的操作
"""pass
import time
from pyqt5.qtcore import
*class
mythread
(qthread)
: sig = pyqtsignal(
int)
def__init__
(self, parent=
none):
super
(mythread, self)
.__init__(parent)
defrun
(self)
: n =
0while
true
: self.sig.emit(n)
print
("run"
) time.sleep(
0.3)
n +=
1class
main
(qobject)
:def
__init__
(self, parent=
none):
super
(main, self)
.__init__(parent)
self._thread = mythread(
) self._thread.sig.connect(self.outtext)
self._thread.start(
)def
outtext
(self, n)
:print
(n)# 這裡進入qt自身的事件迴圈機制
)main = main(
))
之前有一種錯誤的寫法,是在myclass
新增乙個死迴圈,即類中還有乙個函式:
def
work
(self)
:while
true
: time.sleep(
0.1)
print
("work"
)
然後再主迴圈中呼叫:
main = main(
)main.work(
)
這樣,你會發現永遠不會有數字輸出,即outtext
函式永遠不會被呼叫。因為訊號處理是在qt自身的訊號迴圈中處理的,而work
的死迴圈導致永遠無法進入事件迴圈機制,所以無法進行處理!!! pyqt5切換python版本 pyqt5介面切換
主要的思路就是建立兩個frame 如果有兩個以上同理 使用setvisible 函式顯示或者隱藏frame 引數是bool值 import sys from pyqt5.qtwidgets import from pyqt5.qtcore import from pyqt5.qtgui import...
pyqt和python的關係 PyQt5 簡介
本教程的目的是帶領你入門pyqt5。教程內所有 都在linux上測試通過。pyqt4 教程是pyqt4的教程,pyqt4是乙個python 同時支援2和3 版的qt庫。關於 pyqt5 pyqt5 是digia的一套qt5應用框架與python的結合,同時支援2.x和3.x。本教程使用的是3.x。q...
學習PyQt5(三) PyQt5的訊號和槽
我 如圖所示,我們建立乙個按鈕及乙個瀏覽器。什麼是訊號?比如按鈕的單擊,雙擊,按下,釋放等,都可以認為是乙個訊號 什麼是槽?對應的訊號,做出什麼應對,這要乙個應對在乙個函式中,我們可以認為這就是乙個訊號 槽關係 在qt designer中點選工具欄 注意不是工具盒 中的這個圖示 點選這個圖示後,就進...