2011-12-25 11 views
9

QtとGUIプログラミングの新機能ですが、Pythonでモジュールを書くなどの面倒なコーディングを行っています。私は古いモジュールのいくつかのための簡単なGUIを開発する必要があります。私はxとyとzのための1のための2つのライン編集を行います。この機能のためにQtデザイナーに直接Python関数をシグナルとして適用する

def f(x, y): 
    z = x + y 
    return z 

:私が何をしようとしています何

は、次の簡単な例で表すことができます。今私はプッシュボタンの '計算'を作成し、私はそれを行うには私はそれが行編集からxとyを取るしたい機能f(x,y)を実行し、zに出力を与える。

Pythonで書かれた関数f(x,y)を追加することでQt Designerでこれを直接行う方法はありますか?

代替手段はありませんか?

答えて

16

PyQt4 GUIを書いて基本的なワークフローは次のとおりです。

  1. デザインのQt Designerを使用してUI。
  2. pyuic4を使用してUIファイルからPythonモジュールを生成します。
  3. メインプログラムロジック用のアプリケーションモジュールを作成します。
  4. GUIクラスをアプリケーションモジュールにインポートします。
  5. GUIをプログラムロジックに接続します。だから、

、UIファイルcalc.ui与え、あなたがUIモジュールを生成することがありました:

pyuic4 -w calc.ui > calc_ui.py 

そして、このような何かのアプリケーション・モジュールを作成します。それが役立つと

from PyQt4 import QtGui, QtCore 
from calc_ui import CalculatorUI 

class Calculator(CalculatorUI): 
    def __init__(self): 
     CalculatorUI.__init__(self) 
     self.buttonCalc.clicked.connect(self.handleCalculate) 

    def handleCalculate(self): 
     x = int(self.lineEditX.text()) 
     y = int(self.lineEditY.text()) 
     self.lineEditZ.setText(str(x + y)) 

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Calculator() 
    window.show() 
    sys.exit(app.exec_()) 

注意後で簡単に識別できるように、デザイナのプロパティエディタのすべてのウィジェットにobjectNameを設定します。特に、メインフォームのobjectNameはインポートされるGUIクラスのクラス名になります( "-w"フラグがpyuic4に設定されていると仮定します)。

+1

デバッグされたプログラムが例外を処理しませんでしたAttributeError "Calculator"オブジェクトに属性 'buttonCalc'がありません何が間違っていましたか?Qt DesignerのbuttonCalcとしてボタンオブジェクトを指定しました – linuS

+1

あなたがあなたのuiファイルへの変更を保存するたびに 'pyuic4'を実行します。それでも問題が解決しない場合は、私の答えの中のスクリプトで動作する例として[this ui file](http://pastebin.com/Ciu8p4ry)を試してみてください。 – ekhumoro

+0

私はEric IDEを使用しています。 – linuS

関連する問題