我目前在处理从列表参数在PyQT应用程序中构建小部件的信号时非常困惑。
我想要的只是一个列表(或列表大小的数量),并在我的应用程序中构建了许多按钮,每个按钮都会更改列表中的数据元素,这是一个实例变量。
问题是我只知道当我有显式函数时如何处理信号,这些函数只能静态构建而不是从运行时动态构建,或者据我所知。
有人有解决方案吗?我需要根据一个参数形成一组任意按钮,这个参数允许更改列表的成员,这与提供的参数大小相同。
我尝试使用lambda函数,但lambda函数中不允许使用变量赋值。
答案 0 :(得分:1)
您可以在创建按钮时动态创建功能,并将信号连接到此功能:
from PyQt4 import Qt, QtGui, QtCore
app=QtGui.QApplication([])
w=QtGui.QWidget()
QtGui.QVBoxLayout(w)
buttons = []
for i in range(5):
new_button = QtGui.QPushButton("click me %d" % i, w)
w.layout().addWidget(new_button)
# here is the dynamically created function
# use keyword arguments to keep track of the button
# or any other variable
def button_clicked(button=new_button):
print "User clicked on", button.text()
QtCore.QObject.connect(new_button, Qt.SIGNAL("clicked()"), button_clicked)
w.show()
app.exec_()