将Python函数直接应用于Qt Designer作为信号

9 投票
1 回答
7194 浏览
提问于 2025-04-17 08:59

我刚开始接触Qt和图形用户界面(GUI)编程,但我在Python方面有一些经验,比如写模块等等。我需要为我以前的一些模块开发简单的图形界面。

我想做的事情可以用一个简单的例子来说明:

def f(x, y):
    z = x + y
    return z

在这个例子中,我会提供两个输入框,一个用来输入x,另一个用来输入y,还有一个输入框用来显示结果z。接下来,我会创建一个按钮,叫做“计算”。当我点击这个按钮时,我希望它能从输入框中获取x和y的值,然后运行一个函数f(x,y),最后把结果显示在z的输入框里。

请问有没有办法直接在Qt Designer中添加这个用Python写的函数f(x,y)

如果不行,还有什么其他的办法吗?

1 个回答

16

写一个PyQt4图形界面的基本流程是:

  1. 先用Qt Designer设计用户界面。
  2. 然后用pyuic4从这个界面文件生成一个Python模块。
  3. 接着创建一个应用程序模块,负责主要的程序逻辑。
  4. 把图形界面的类导入到应用程序模块中。
  5. 最后把图形界面和程序逻辑连接起来。

比如,给定一个界面文件calc.ui,你可以用以下命令生成界面模块:

pyuic4 -w calc.ui > calc_ui.py

然后可以创建一个应用程序模块,像这样:

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_())

需要注意的是,在设计器的属性编辑器中为每个控件设置objectName会很有帮助,这样后面就能轻松识别它们。特别是,主窗口的objectName会变成导入的图形界面类的类名(前提是使用了pyuic4的“-w”选项)。

撰写回答