PyQt:QListWidget中的自定义小部件中的单击按钮的插槽

时间:2019-03-04 03:35:12

标签: python pyqt pyqt5 signals-slots qlistwidget

因此,基本上,我已经使用以下方法制作了一个自定义窗口小部件,以填充到QListWidget中:https://stackoverflow.com/a/49272941/7020404

我正在从事这个项目: Shopping Chart

每当我单击“添加到图表”按钮时,我希望该按钮将被禁用(已经创建),并且我将拥有这个自定义窗口小部件项,该列表项将在QListWidget的图表中。但是,当我单击“白菜”的“添加到购物车”按钮时,我将猪肉放在购物车中,而不是白菜。

Disabled Button

购物车: enter image description here

我有3个标签,分别是食物,饮料和图表。每个选项卡都有一个名为TabFood,TabDrink和TabCart的类。

基本上,我已经有了foodMenuList(MenuWidget的列表)。

我的MenuWidget类:

class MenuWidget(QWidget):
def __init__(self, id, image, name, price, availability, sellerID):
    super().__init__()

    self.id = id
    self.image = image
    self.name = name
    self.price = price
    self.availability = availability
    self.sellerID = sellerID

    self.imageLabel = QLabel()
    self.imageLabel.setPixmap(self.image)

    self.nameLabel = QLabel()
    self.nameLabel.setText(self.name)

    self.priceLabel = QLabel()
    self.priceLabel.setText("Rp " + str(price))

    self.availabilityLabel = QLabel()
    if self.availability:
        self.availabilityLabel.setText("Ready")
    else:
        self.availabilityLabel.setText("Out of Stock")

    self.vbox = QVBoxLayout()
    self.vbox.addWidget(self.nameLabel)
    self.vbox.addWidget(self.availabilityLabel)
    self.vbox.addWidget(self.priceLabel)

    self.hbox = QHBoxLayout()
    self.addToCartButton = QPushButton("Add To Cart")

    self.hbox.addWidget(self.imageLabel)
    self.hbox.addLayout(self.vbox)
    self.hbox.addWidget(self.addToCartButton)

    self.setLayout(self.hbox)

这是我的TabFood代码:

class TabFood (QWidget):
def __init__(self, tabCart):
    super().__init__()

    self.hbox = QHBoxLayout()

    # Create the list
    self.mylist = QListWidget()

    self.mylist.show()
    self.hbox.addWidget(self.mylist)

    self.setLayout(self.hbox)

    for food in foodMenuList:
        # Add to list a new item (item is simply an entry in your list)
        item = QListWidgetItem(self.mylist)
        self.mylist.addItem(item)

        # Instanciate a custom widget
        food.addToCartButton.clicked.connect(lambda: self.addToCart(tabCart, food)) ##tabCart is the instance of TabCart class (Just like a TabFood Class)
        item.setSizeHint(food.minimumSizeHint())

        # # Associate the custom widget to the list entry
        self.mylist.setItemWidget(item, food)


def addToCart(self, tabcart, item):
    self.sender().setEnabled(False)
    print(item.name) ##This always return pork instead of cabbage
    itemNew = OrderWidget(item.id, item.image, item.name, item.price, item.availability, item.sellerID)
    tabcart.addItem(itemNew) ##It is only a function to add item in tabcart's QListWidget

我认为问题出在这一行:

food.addToCartButton.clicked.connect(lambda: self.addToCart(tabCart, food))

因为在addToChart函数中,当我打印item.name时,它总是打印猪肉而不是白菜。但是我不确定,因为我在迭代中提供了food作为参数来确定选择了哪个项目。

那我该如何解决这个问题?

0 个答案:

没有答案