2012-01-05 6 views
8

ボタンのclick()信号を自分の関数に接続しようとしています。このボタンは、QT Designerで作成したウィジェットにあります。私はそうのようなQUiLoaderで.uiファイルを読み込む:Qtデザイナで定義されたシグナル/スロットを実装する方法

class MyWidget(QtGui.QMainWindow): 
    def __init__(self, *args): 
     QtGui.QMainWindow.__init__(self, *args) 

     loader = QtUiTools.QUiLoader() 
     file = QtCore.QFile("pyside_ui_qtdesigner_form_test.ui") 
     file.open(QtCore.QFile.ReadOnly) 
     self.myWidget = loader.load(file, self) 
     file.close() 

     self.setCentralWidget(self.myWidget) 

     btn = self.myWidget.findChild(QtGui.QPushButton, "HelloWorldButton") 
     btn.clicked.connect(self.slot1)   

    def slot1(self): 
     print "Received" 

が、これは()シグナルをクリックしたボタンに接続するための正しい方法は何ですか?私は信号とスロットをQt Designerで直接結びつけることができますが、コード内でどのように準備してそのようなワイヤーアップをするのですか? サイド質問:上記のコードは機能しますが、メインウィンドウのサイズが間違っています。正しいサイズで表示されるようにするにはどうすればよいですか?高さ/幅の最小の制約でこれを行う必要がありますか?

答えて

12

予め定義されたQt信号を定義済みのQtスロットに直接接続するには、Signals and Slots Editing Modeを使用します。

だから、簡単なダイアログの「閉じる」ボタンのために、あなただけの「OK」をクリックし、clicked()信号とreject()スロットを選択し、ダイアログにあるボタンからの接続をドラッグすることができ、かつ行うためのより多くの何もないだろう。

自分で定義したい信号やスロットについては、あらかじめDesignerで「準備」する必要はありません。すべてはあなた自身のコードで行う必要があります。

あなたの例では、すでにかなりよくこのことを示していますが、接続は次のように、はるかに簡単かつきれいに行うことができる:「間違ったサイズ」を有するメインウィンドウについては

self.myWidget.HelloWorldButton.clicked.connect(self.slot1) 

:それは伝えることは困難です表示されているコードからは、読み込んでいるウィジェットにレイアウトを設定していない可能性があります。

ところで、QUiLoaderを使用している具体的な理由はありますか? pyuic4を使ってPythonモジュールをコンパイルすると、はるかに柔軟になり、生成されたコードから多くのことを学ぶことができます。私にとって

EDIT

、メインフォーム上のレイアウトを設定すると、あなたが話しているサイズ変更の問題を硬化させます。

これを行う方法がわからない場合は、デザイナーでメインフォームの空白部分を右クリックし、メニューからLayout/Layout in a Gridを選択します(このためにツールバーにもボタンがあります)。

これを済ませたら、フォームのサイズを変更すると、フォームに含まれるウィジェットに合わせてフォームが自動的に伸びます。

+0

ありがとうございます。 Qt Designerの最小サイズを設定することで、サイズの問題が解決しました。私はおそらくメインウィンドウがその中のすべてのウィジェットが見えるようにサイズが決められていることを保証するプログラム的な方法があると考えました。 – Sven

+0

Re QUiLoader、具体的な理由はありませんが、それ以外は簡単です。 'pyuic4'アプローチについては、.uiファイルに対してEclipse/PyDevが自動的に' pyuic4'を起動させる方法を研究しなければなりません。 – Sven

+0

@ Sven。サイズ変更に関する私の更新答えを見てください:私はそれがレイアウトの問題であると確信しています。 – ekhumoro

関連する問題