因此,基本上,我已经使用以下方法制作了一个自定义窗口小部件,以填充到QListWidget中:https://stackoverflow.com/a/49272941/7020404
每当我单击“添加到图表”按钮时,我希望该按钮将被禁用(已经创建),并且我将拥有这个自定义窗口小部件项,该列表项将在QListWidget的图表中。但是,当我单击“白菜”的“添加到购物车”按钮时,我将猪肉放在购物车中,而不是白菜。
我有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作为参数来确定选择了哪个项目。
那我该如何解决这个问题?