3
使用Python3和PyQt4的我有一個函數(運行)更新的GUI,作爲輸入一個可調用的,以提供狀態更新。PyQt的:從一個回調
class Windows(QtGui.QWidget):
# Creates a widget containing:
# - a QLineEdit (status_widget)
# - a button, connected to on_run_clicked
def on_run_clicked(self):
def update(text):
self.widget.setText(text)
threading.Thread(target=run, args=(update,)).start()
這可以正常工作(即文本更新在窗口小部件中正確顯示)。然而,當我通過的QTextEdit更換QLineEdit的和使用追加方法添加文本,我得到:
的QObject ::連接:不能排隊類型的參數 'QTextCursor'
(確保「QTextCursor」使用qRegisterMetaType()。)註冊
它仍然有效,但指向的事實,我做錯了什麼,我不知道,我會繼續工作瓦特如果更多線程處於活動狀態。通常情況下,我做這類使用信號和槽的更新,但運行功能不PyQt的具體。問題是:
- 爲什麼它沒有QLineEdit的警告,而不是 QTextEdit?
- 什麼是對付這樣的情況下正確的方法是什麼?
[此問題](http://stackoverflow.com/q/1595649/984421)是Python vs Qt線程問題的一個很好的起點。執行摘要:在與Qt交互時總是使用Qt線程;否則,使用Python線程。 – ekhumoro
啊非常酷 - 謝謝! –
當你不控制運行功能但是你可以給它回調時,這是正確的方法嗎?最簡單的事情似乎是在回調函數上進行發射,對吧?此外,這篇文章http://labs.qt.nokia.com/2010/06/17/youre-doing-it-wrong/說你不應該繼承QThread,這是否也適用於PyQt? – Hernan