【问题标题】:how to connect function to qt widget in qt designer? - python如何在 qt 设计器中将功能连接到 qt 小部件? - Python
【发布时间】:2014-03-26 23:00:38
【问题描述】:

我是 Python 和 pyqt 的新手。

我为使用控制台的练习创建了一个用于大数乘法的小应用程序。现在我正在尝试将其作为 GUI 应用程序运行。我用函数创建了我的应用程序,我的代码是:

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:。

我的问题是:如何将我的函数连接到标签和计算按钮?

【问题讨论】:

    标签: python qt function pyqt4 qt-designer


    【解决方案1】:

    首先,您需要保存表单并将其转换为 Python 模块。您可以使用pyuic 工具执行此操作:

    pyuic4 -o form_ui.py form.ui
    

    接下来,您需要创建一个脚本,该脚本将导入 form_ui 模块并将您的应用程序逻辑连接到 GUI。 Window 类的基类必须与 Qt Designer 的顶级小部件相同(即 QWidgetQMainWindowQDialog)。另请注意,来自 Qt Designer 的小部件将成为在 __init__ 方法中创建的 ui 对象的属性。很明显,您需要更改我在示例中使用的名称以匹配您实际 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_())
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-10
    • 2014-11-29
    • 1970-01-01
    • 2011-07-25
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多