如何在Qt Designer中将函数连接到Qt控件? - python
我刚开始学习Python和pyqt。
我做了一个小程序,用来进行大数相乘,这是一个练习,最开始是在控制台上运行的。现在我想把它变成一个图形界面应用。我用函数创建了我的程序,代码如下:
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里设计了一个界面,长得像这样:。
我的问题是:我该如何把我的函数连接到标签和计算按钮上呢?
1 个回答
3
首先,你需要保存你的表单,并把它转换成一个Python模块。你可以使用 pyuic
工具来完成这个操作:
pyuic4 -o form_ui.py form.ui
接下来,你需要创建一个脚本,这个脚本会导入 form_ui
模块,并把你的应用逻辑和图形界面(GUI)连接起来。这里有个要注意的地方,Window
类的基类必须和你在Qt Designer中使用的顶层控件相同(也就是说,它可以是 QWidget
、QMainWindow
或 QDialog
)。另外,要记住,来自Qt Designer的控件会成为在 __init__
方法中创建的 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_())