通过实例连接新创建的对象上的pyqt插槽

时间:2019-03-05 19:48:56

标签: python lambda pyqt pyqt5 qt-signals

因此,我目前仍在寻求针对此问题的适当解决方案。 通过实例化,我正在以前的现有布局中创建新的QT对象。 我想在对象创建时使用某种“地域快照”,以便这个新创建的对象每次在字典中寻找适当的条目时都调用适当的int。

我不会重新复制所有内容,因为它有点长,但是仍然如此。

from PyQt5 import QtCore, QtGui, QtWidgets
import list_territories as territories

class XmlGeneratorApp(QtWidgets.QMainWindow, main_frame.Ui_XmlGenUI):
    def __init__(self, parent=None):    
        super(XmlGeneratorApp, self).__init__(parent)

    def add_territories(self):
        self.territory_count += 1
        layout = QtWidgets.QHBoxLayout()
        hd_price_box = QtWidgets.QCheckBox()
        hd_price_box.setObjectName("product%d_price_hd_check" % self.territory_count)
        hd_price_box.setChecked(True)
        layout.addWidget(hd_price_box)
        self.product_layout.addLayout(layout, self.territory_count, 0)
        new_entry_name = str("territory%d" % self.territory_count)
        new_entry = territories.Territories
        new_entry.product_price_hd_checks = hd_price_box.isChecked()
        territories.terr_dict[new_entry_name] = new_entry
        hd_price_box.stateChanged.connect(lambda territory_number=self.territory_count :    self.set_product_price_hd_check(territory_number))

    def set_product_price_hd_check(self, territory_number):
        self.territory_number = territory_number
        self.checkbox = self.Territories.findChild(QtWidgets.QCheckBox, "product%d_price_hd_check" % territory_number)

        territories.terr_dict["territory%d" % territory_number].product_price_hd_checks = self.checkbox.isChecked()

我使用了lambda,但是我使用的两种方法都有各自的问题。

hd_price_box.stateChanged.connect(lambda territory_number=self.territory_count : self.set_product_price_hd_check(territory_number))

将使region_number每次返回0。 至于这个:

hd_price_box.stateChanged.connect(lambda : self.set_product_price_hd_check(self.territory_count))

将返回适当的int,但是,每当创建新区域时,它将增加到下一个int,并且所有对象将返回与上一个创建的值相同的值。

我误解了连接的工作方式吗?只是不可能在对象的连接中分配一个值吗?

0 个答案:

没有答案