2017-11-02 9 views
-2

私はPythonの質問をしていますが、非常にシンプルであるかもしれませんが、どうすればいいのかわかりません。 基本的に私が実行したい:Python - ユーザーインタラクション後にクラスから値を返す方法

value = myUiClass().getValue() 

私は次のことを実行している場合、それはなしに直接ではなくイベントUI自体があるように私はここで定義されていないことをUI(と対話するためにユーザを待たないが返されますポイントではありません)

class MyUi(QtWidgets.QWidget): 

    def __init__(self, parent=None): 
     super(MyUi, self).__init__(parent) 

     self.finalValue = None 

     # UI that will modify self.finalValue 

    def getValue(self): 
     return self.finalValue 

value = MyUi().getValue() 

ユーザーがUIとやりとりするまでプロセスを一時停止するには何か不足していると思いますか?ここで

は私が

from PySide2 import QtWidgets 
col = QtWidgets.QColorDialog.getColor() 
print col 

任意のアイデア何をしたいの例ですか?

thx

+1

あなたは正確に問題がありますか? [mcve]を表示してください。 Pythonには多くのUIフレームワークがあります。あなたは何を使っていますか? –

+0

最初の投稿を編集しました – Goffer

+0

イベントの前にデータを取得するには、信号とスロットを使用する必要があります。これはpydideの基本的な作業で、基本的なチュートリアルでは入手できます。 – eyllanesc

答えて

0

だからもっと深く見てください。 QDialogを使うのは、そのための組み込みメソッドがあるので簡単です。

exec_()それは、ダイアログからの応答を取得するまでは、プロセスを一時停止します(self.accept()またはself.reject()

でそれを行うことが明らかに可能ですQWidgetも手続きは少し異なり、私はそれをテストしていません。 QDialogリファレンスで実際に説明を見つけることができます。

from PySide2 import QtWidgets 

class MyDialog(QtWidgets.QDialog): 
    def __init__(self, parent=None): 
     super(MyDialog, self).__init__(parent) 

     self.valueToReturn = None 

    def mousePressEvent(self, event): 
     super(MyDialog, self).mousePressEvent(event) 
     # get the value from UI and set it here 
     self.valueToReturn = 5 
     self.accept() 

    @staticmethod 
    def launch(): 
     dlg = MyDialog() 
     r = dlg.exec_() 
     if r: 
      return dlg.valueToReturn 
     else: 
      return None 

value = MyDialog.launch() 
print value 
関連する問題