2016-11-21 6 views
0

私はこれに関する以前の質問を見つけられないのに驚いていますが、投稿する前に正直な試みをしました。QT Creatorフォームを使用したPython - 複数の値を取得することは可能ですか?

QLineEdit、QTextEdit、およびQCheckboxのQtWidgetsを含むQt Creatorでuiを作成しました。私はpyuic5を使用して小さなpythonアプリケーションで使用する.pyファイルに変換しました。私はフォームを接続して正常に動作させることができましたが、これは初めてのフォームでのPythonの使用です。

私は、GUIフォームに含まれるすべてのウィジェットのObjectNamesとValuesを取得して関連付けられたキー:値を持つ辞書に格納できるようにする組み込み関数またはオブジェクトがあるかどうかを調べていますが、後処理のために情報を送信する必要があるからです。

私はこのような何かを手動で働くだろうと思います:

... 
dict = [] 
dict['checkboxName1'] = self.checkboxName1.isChecked() 
dict['checkboxName2'] = self.checkboxName2.isChecked() 
dict['checkboxName3'] = self.checkboxName3.isChecked() 
dict['checkboxName4'] = self.checkboxName4.isChecked() 
dict['lineEditName1'] = self.lineEditName1.text() 
... and on and on 

しかし、それらを介してすべてのオブジェクトとループをつかむための方法は、それぞれ異なるタイプ(すなわち、チェックボックス、lineedits、など)がする必要がある場合であっても、そこにあります別々に行うのですか?

私はそれをはっきりと説明してくれることを願っています。
ありがとうございます。

答えて

1

最終的には動作しました。どこでもPython固有のサンプルを見つけることができなかったので、試行錯誤によってこれは完全に機能しました。私は適切に参照されたフォーム上のすべてのQCheckBox objectNamesのリストを生成することができる.pyファイルの作業コード全体を含めています。

私はQt Creatorの中から私のフォームmain_form.uiという名前を付けました。私はその後、pyuic5での.pyファイルに変換

pyuic5 main_form.ui -o main_form.py 

これはsandbox.pyファイルの内容です:

from PyQt5 import QtCore, QtGui, QtWidgets 
import sys 
import main_form 
# the name of my Qt Creator .ui form converted to main_form.py with pyuic5 
# pyuic5 original_form_name_in_creator.ui -o main_form.py 


class MainApp(QtWidgets.QMainWindow, main_form.Ui_MainWindow): 
    def __init__(self): 
     super(self.__class__, self).__init__() 
     self.setupUi(self) 
     # Push button object on main_form named btn_test 
     self.btn_test.clicked.connect(self.runTest) 

    def runTest(self): 
     # I believe this creates a List of all QCheckBox objects on entire UI page 
     c = self.findChildren(QtWidgets.QCheckBox) 
     # This is just to show how to access objectName property as an example 
     for box in c: 
      print(box.objectName()) 


def main(): 
    app = QtWidgets.QApplication(sys.argv) # A new instance of QApplication 
    form = MainApp() # We set the form to be our ExampleApp (design) 
    form.show() # Show the form 
    app.exec_() # and execute the app 


if __name__ == '__main__': # if we're running file directly and not importing it 
    main() # run the main function 
1

は、テンプレート引数が1を取得するためのウィジェットの種類を指定することができるようになるQObject::findChildren() Cで

++を参照してください、例えばQLineEditオブジェクトを取得するだけですが、そのオブジェクトがPythonにマッピングされているかどうか、そのマッピング方法がわかりません。

すべての型を取得し、結果のリストを反復処理する間に処理を切り替える必要がある場合があります。

関連する問題