2014-03-26 76 views
2

我是新的python和pyqt。如何將函數連接到qt設計器中的qt小部件? - python

我爲控制檯的鍛鍊創造大數乘法的小應用程序。現在我試着跑進gui app。我創建我的應用程序的功能,我的代碼是:

def digit(n): 
     len(str(n)) 

def multi(u,v): 
     n = max(digit(u),digit(v)) 

     if (u==0) or (v==0): 
       return 0 
     elif n < 4: 
       return u*v 
     else: 
       m = int(n/2) 

       x = u/10**m 
       y = u%10**m 

       w = v/10**m 
       z = v%10**m 

       return (multi(x,w)*(10**m * 10**m) + (multi(x,z)+multi(w,y))*(10**m) + multi(y,z)) 

我在qtDesigner設計UI的一些事情是這樣的:enter image description here

我的問題是如何將我的功能連接到標籤,並計算按鈕? tnx

回答

2

首先,您需要保存表單並將其轉換爲python模塊。您可以使用pyuic工具做到這一點:

pyuic4 -o form_ui.py form.ui 

接下來,你需要創建一個腳本,將導入form_ui模塊和應用程序邏輯連接到GUI。 Window類的基類必須與Qt Designer的頂級小部件(即QWidget,QMainWindowQDialog)相同。另外請注意,來自Qt Designer的小部件將成爲在__init__方法中創建的ui對象的屬性。 Obvioulsy,您需要更改我在示例中使用的名稱,以匹配實際UI中的名稱。

from PyQt4 import QtCore, QtGui 
from form_ui import Ui_Form 

def digit(n): 
    len(str(n)) 

def multi(u,v): 
    n = max(digit(u),digit(v)) 

    if (u==0) or (v==0): 
     return 0 
    elif n < 4: 
     return u*v 
    else: 
     m = int(n/2) 

     x = u/10**m 
     y = u%10**m 

     w = v/10**m 
     z = v%10**m 

     return (multi(x,w)*(10**m * 10**m) + (multi(x,z)+multi(w,y))*(10**m) + multi(y,z))  

class Window(QtGui.QWidget): 
    def __init__(self): 
     QtGui.QWidget.__init__(self) 
     self.ui = Ui_Form() 
     self.ui.setupUi(self) 
     self.ui.calcButton.clicked.connect(self.handleCalculate) 

    def handleCalculate(self): 
     u = int(str(self.ui.lineEdit1.text())) 
     v = int(str(self.ui.lineEdit2.text())) 
     # calculate answer... 
     self.ui.label.setText(str(answer)) 

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Window() 
    window.show() 
    sys.exit(app.exec_()) 
+0

而不是使用''pyuic4'',你可以在運行時直接加載的.ui文件,請參閱http://www.riverbankcomputing.com/pipermail/pyqt/20​​07-April/015902.html的例子。 – doshea