如何在 qt 设计器中将功能连接到 qt 小部件? - Python
Posted
技术标签:
【中文标题】如何在 qt 设计器中将功能连接到 qt 小部件? - Python【英文标题】:how to connect function to qt widget in qt designer? - 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:。
我的问题是:如何将我的函数连接到标签和计算按钮?
【问题讨论】:
【参考方案1】:首先,您需要保存表单并将其转换为 Python 模块。您可以使用pyuic
工具执行此操作:
pyuic4 -o form_ui.py form.ui
接下来,您需要创建一个脚本,该脚本将导入 form_ui
模块并将您的应用程序逻辑连接到 GUI。 Window
类的基类必须与 Qt Designer 的***小部件相同(即 QWidget
、QMainWindow
或 QDialog
)。另请注意,来自 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_())
【讨论】:
不使用pyuic4
,可以在运行时直接加载.ui文件,例子见riverbankcomputing.com/pipermail/pyqt/2007-April/015902.html。以上是关于如何在 qt 设计器中将功能连接到 qt 小部件? - Python的主要内容,如果未能解决你的问题,请参考以下文章