1

PyQt で loadUi() メソッドを使用して QtDesigner インターフェイス ファイルをロードするというアイデアが気に入っています。これは、ui ファイルを頻繁に変更し、常に py ファイルに変換したくないためです。

ただし、ui ファイル内のさまざまなウィジェットやビューにアクセスする方法を理解するのに苦労しています。以下は、UI での読み込み方法を示しています。

class MyClass(QtGui.QMainWindow):
    def __init__(self, parent = None):
        super().__init__(parent)
        ui = uic.loadUi('MyUserInterface.ui',self)


if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    mainapplication = MyClass()
    mainapplication.show()
    app.exec_()

正常に表示されますが、次のような方法で GUI の要素にアクセスできると思っていました...

ui.sampleButton.makeDraggable()

私の質問は、GUI 内のさまざまな要素にどのようにアクセスできますか?

編集 1: uic.load 呼び出しを ui に割り当てずに試してみました。以下のようにアクセスすると、Ui_MainWindow を使用していくつかのプロパティにアクセスできます。ただし、エラーがスローされます

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    mainapplication = MyClass()
    mainapplication.Ui_MainWindow.graphicsView.acceptDrops(True)
    mainapplication.show()
    app.exec_()

私が得るエラーは...

Traceback (most recent call last):  File "C:\Users\Me\workspaces\com.samplesoftware.software\src\SoftwareView\MyClass.py", line 17, in <module>
  mainapplication.Ui_MainWindow.graphicsView.acceptDrops(True)
  AttributeError: 'MyClass' object has no attribute 'Ui_MainWindow'

何か案は?

4

3 に答える 3

0

.py ファイルに変換する必要はありませんが、それらにアクセスするには名前を付ける必要があります。そうしないと、ui ファイルで sampleButton が何と呼ばれているかを知る必要があります。

sampleButton の名前を my_btn に変更するだけでアクセスできます。

于 2012-12-05T11:10:00.870 に答える
0

loadUi関数は、ui ファイル パスを最初の引数として取り、base-instance を 2 番目の引数として取ります

base-instance は、UI の最上位ウィジェットと同じ Qt クラスである必要があります。これは、loadUiがすべての UI を base-instance に挿入し、そうするためにいくつかのメソッドを呼び出す必要があるためです。UI で定義されているすべての子ウィジェットは、基本インスタンスの属性になります。

したがって、次loadUiのように呼び出す必要があります__init__

class MyClass(QtGui.QMainWindow):
    def __init__(self, parent = None):
        super(MyClass, self).__init__(parent)
        uic.loadUi('MyUserInterface.ui', self)

そして、次のようにアクセスできるはずですgraphicsView

        self.graphicsView.setAcceptDrops(True)
于 2012-12-05T19:46:48.917 に答える
0

app.exec_() を実行する前に Ui_MainWindow を呼び出そうとしていたため、その理由がわかりました。Ui_MainWindow 呼び出しを最後に移動すると、機能します。私は推測していますが、後から考えると理にかなっています. MainWindow は、そのプロパティを変更する前に存在する必要があります.

于 2012-12-06T05:18:44.783 に答える