为什么我的Qt按钮(在循环中生成)打开同一对话框?

我有以下简化的代码,可以为Qt窗口生成窗口小部件。

information_models = [ models.Division,... ]
information_models_titles = [ 'Division',... ]
information_model_attrs = [ [ 'name' ],... ]
ctr = 0
for model,title,attrs in zip(information_models,information_models_titles,information_model_attrs):
    ...
    add_btn = QPushButton('Add')  # Assume this widget added to a layout somewhere below.
    ...

现在,我还需要将add_btn的{​​{1}}信号连接到插槽功能。我通过在循环中包含以下代码来做到这一点。

clicked

这是add_btn.clicked.connect( lambda : self._add_model_instance_action(model,attrs,model_instances_list))) 的代码,它只是向我们显示了一个对话框,允许您创建_add_model_instance_action(...)的新实例/记录:

model

该方法没有任何错误。但是,所有按钮似乎都打开了相同的对话框,这是循环中@pyqtSlot() def _add_model_instance_action(self,model,model_instances_list): add_dialog = RecordDialogFactory.create_add_dialog(model,f'Add a new {title.lower()}') add_dialog.show() add_dialog.exec_() # Must do this to block execution of the # code below until the dialog is closed. ... 的最后一个值。例如,如果我为模型modelDivision创建“添加”按钮,并且最后创建了按钮,则这两个按钮都将打开Student的对话框。幸运的是,我通过用以下代码替换了以前的信号插槽连接代码来解决了这个问题:

Student

为什么更改解决了我的问题?我怀疑这与如何将变量传递给函数以及lambda如何工作有关。

gxl6330395 回答:为什么我的Qt按钮(在循环中生成)打开同一对话框?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3133422.html

大家都在问