Python 如何将函数连接到PyQt5中动态创建的QPushButtons

Python 如何将函数连接到PyQt5中动态创建的QPushButtons,python,pyqt5,Python,Pyqt5,我将QPushButtons动态添加到QTableWidget中的每一行 当我点击一个按钮时,我希望它打开一个基于同一行数据的链接 只有先选择行,然后单击按钮,才能使其工作 我希望能够单击按钮而不必先单击行 这是我的一个片段: def populate_table(self): instances = [] table = self.ui.ESC_tableWidget table.setRowCount(0) button_dict = {} f

我将QPushButtons动态添加到QTableWidget中的每一行

当我点击一个按钮时,我希望它打开一个基于同一行数据的链接

只有先选择行,然后单击按钮,才能使其工作

我希望能够单击按钮而不必先单击行

这是我的一个片段:

def populate_table(self):
    instances = []

    table = self.ui.ESC_tableWidget
    table.setRowCount(0)


    button_dict = {}

    for esc_inst in instances:
        button_dict[esc_inst.esc_id] = QtWidgets.QPushButton('Open link')
        rowPosition = table.rowCount()
        table.insertRow(rowPosition)
        table.setItem(rowPosition , 0 , QtWidgets.QTableWidgetItem(esc_inst.esc_id))
        .
        .
        .
        esc_table.setCellWidget(rowPosition, 5 , button_dict[esc_inst.esc_id] )



    for button in button_dict.values():
        button.clicked.connect(self.open_link)



def open_link(self):
    selected_esc_id = table.item(table.currentRow(), 0).text()
因此,我需要绕过
table.currentRow()
函数,因为如果选择了一行,它将返回正确的行号。如果直接单击按钮而不首先选择行,则返回先前选择的行号

我只能想到像创建一个orderedDict之类的黑客解决方案,但这似乎是一件微不足道的事情,我确信我遗漏了一些东西


有什么办法可以克服这个问题吗?

你可以让你的按钮点击回调接收一些参数来定义它是什么按钮。将回调附加到按钮时,为调用回调的每个按钮创建单独的lambda函数,但带有索引:

for i, button in enumerate(button_dict.values()):
        button.clicked.connect(lambda checked, i=i: self.open_link(i))
然后,在回调中:

def open_link(self, i):
    selected_esc_id = table.item(i, 0).text()

您需要lambda中的
i=i
-部分,否则,它只会将
i
的最后一个值传递给回调函数。包含该部分后,每个按钮都将向回调方法传递不同的
i

更改
按钮。单击.connect(lambda i=i:self.open_link(i))
按钮。单击.connect(lambda选中,i=i:self.open_link(i))
Ohw哇,忘记了QT中选中的参数。谢谢太棒了,它能工作。在哪里可以找到此语法的文档?非常感谢。对于lambda函数?