将Python函数直接应用于Qt Designer作为信号
我刚开始接触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图形界面的基本流程是:
- 先用Qt Designer设计用户界面。
- 然后用
pyuic4
从这个界面文件生成一个Python模块。 - 接着创建一个应用程序模块,负责主要的程序逻辑。
- 把图形界面的类导入到应用程序模块中。
- 最后把图形界面和程序逻辑连接起来。
比如,给定一个界面文件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”选项)。