基于PyQt

时间:2017-01-19 22:56:33

标签: python combobox pyqt pixmap

我有一个填充了文本条目的QComboBox(例如," apple"," orange"," banana")。每当选择一个列出的项目时,我需要更新位于gridlayout单元格中的QPixMap。因此,如果您选择" apple",apple.jpg将显示在指定的ComboBox的PixMap单元格中。

我试图避免手动输入的长列表" if / else"代码中的语句,因为我将有许多组合框,其中包含多个选项(最终来自数据库队列)和许多图像单元格(每个组合框一个)。

在网格内的QLabel容器中创建静态PixMaps,我可以处理。和ComboBoxes本身一样。

编辑:

我试图实现Subin Gopi建议的代码(我只包括相关部分):

self.fruit_list = ['apple', 'orange', 'banana']

self.fruit_combo = QtGui.QComboBox()
self.fruit_combo.addItems(self.fruit_list)

def image_update(self, qcombobox, qlabel):
    image_path ="c :/images"
    current_item = str(qcombobox.currentText())
    current_image = '%s/%s.jpg' %(image_path, current_item)
    qlabel.setPixmap(QtGui.QPixmap(current_image))

self.fruit_image = QtGui.QLabel(self)
self.grid.addWidget(self.fruit_image, 1, 1) 
self.fruit_combo.currentIndexChanged[str].connect(lambda: 
                  self.image_update(self.fruit_combo, self.fruit_image)

这似乎不允许图像更新。我不确定我是在某个地方犯了一个明显的错误还是什么。

1 个答案:

答案 0 :(得分:0)

您可以对代码进行一次小更新,即图片名称(例如," apple"," orange"," banana")和QComboBox项目名称应该相同。所以你可以避免if else语句。检查示例代码。如果您不期待这个答案,抱歉。谢谢,Subin

QComboBox.currentIndexChanged.connect (imageUpdate)
imagePath       = 'C:/images'

def imageUpdate :
    currentItem     = str (QComboBox.currentText ())
    currentImage    = '%s/%s.jpg'% (imagePath, currentItem) 
    QLabel.setPixmap (QtGui.QPixmap (currentImage ))