私は次のコードを持っています:
class Functions(QObject):
mysig = Signal(filename)
def __init__(self, parent=None):
super(Functions, self).__init__(parent)
self.result = None
def showDialog(self, filename):
self.mysig.emit(filename)
def grabResult(self):
while not self.result:
time.sleep(5)
return result #this is the question
def setResult(self, result):
self.result = result
コードの他の部分にはこれがあります:
class Dialog(QDialog):
anotherSig = Signal(str)
fun = Functions()
def __init__(self, parent=None, filename=filename):
self.filename = filename
#Here it displays a picture based on the filename parameter
def okButtonClicked(self):
text = self.lineedit.text()
fun.setResult(text)
#Tried also this:
self.anotherSig.emit(text)
Functions()
クラスはワーカーから呼び出されますQThread
(ここには示されていません)。
私の質問はこれだと思います。Functions
ユーザーがテキストを入力して[OK]ボタンをクリックしたことをクラスに伝えるにはどうすればよいですか?そのSignalを接続しようとanotherSig
しましたが、接続しようとすると、QtはQPixmapを別のスレッドから設定しても安全ではないと文句を言い、機能しません。
ここで使用している方法は「機能」しますが、信頼性が低いと感じています。さらに、Functions
クラス内の関連するすべてのメソッドが存在する場合にのみ機能します@classmethod
。このように、何らかの理由で機能しません。setResult
は呼び出されますが(確認のためにステートメントを追加しました)print
、grabResult
それでも。として表示self.result
されNone
ます。