如何在Qt Designer中将函数连接到Qt控件? - python

2 投票
1 回答
7985 浏览
提问于 2025-04-18 00:04

我刚开始学习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中使用的顶层控件相同(也就是说,它可以是 QWidgetQMainWindowQDialog)。另外,要记住,来自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_())

撰写回答