将python函数直接应用于Qt设计器作为信号

lin*_*nuS 9 python pyqt signals-slots pyqt4 qt-designer

我是Qt和GUI编程的新手,但我已经在python中编写了相当多的代码 - 编写模块等等.我需要为我的一些旧模块开发简单的GUI.

我想做的事情可以通过以下简单的例子来表示:

def f(x, y):
    z = x + y
    return z
Run Code Online (Sandbox Code Playgroud)

对于此功能,我将为x和y提供两个行编辑,为z提供一个.现在我创建一个按钮'计算',当我这样做时,我希望它从行编辑中获取x和y运行函数f(x,y)并将输出提供给z.

有没有办法直接在Qt Designer中添加f(x,y)用python编写的函数?

如果不是什么选择?

ekh*_*oro 16

编写PyQt4 gui时的基本工作流程是:

  1. 使用Qt Designer设计UI.
  2. 使用UI文件生成Python模块pyuic4.
  3. 为主程序逻辑创建一个应用程序模块.
  4. 将GUI类导入Application模块.
  5. 将GUI连接到程序逻辑.

因此,给定UI文件calc.ui,您可以生成UI模块:

pyuic4 -w calc.ui > calc_ui.py
Run Code Online (Sandbox Code Playgroud)

然后创建一个这样的应用程序模块:

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_())
Run Code Online (Sandbox Code Playgroud)

请注意,objectName在Designer的属性编辑器中为每个小部件设置它有助于以后轻松识别它们.特别是,objectName主窗体的类将成为导入的GUI类的类名(假设使用了"-w"标志pyuic4).