PyQT如何根据List构建UI?

时间:2014-05-27 16:28:09

标签: python pyqt

我目前在处理从列表参数在PyQT应用程序中构建小部件的信号时非常困惑。

我想要的只是一个列表(或列表大小的数量),并在我的应用程序中构建了许多按钮,每个按钮都会更改列表中的数据元素,这是一个实例变量。

问题是我只知道当我有显式函数时如何处理信号,这些函数只能静态构建而不是从运行时动态构建,或者据我所知。

有人有解决方案吗?我需要根据一个参数形成一组任意按钮,这个参数允许更改列表的成员,这与提供的参数大小相同。

我尝试使用lambda函数,但lambda函数中不允许使用变量赋值。

1 个答案:

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