簡體   English   中英

Python PyQt5根據comboBox中的值更改listWidget中的項目

[英]Python PyQt5 change items in listWidget in accordace to the value in comboBox

我正在使用PyQt5(因為這是Anaconda中可用的默認PyQt)來為我的Python程序開發GUI。

這是屏幕截圖:

在此處輸入圖片說明

在comboBox中,有四個值:選項1,選項2,選項3和選項4。我的目的是根據comboBox中的值更改listWidget中列出的項目。 例如,如果我將comboBox中的值更改為“ Option 2”,則listWidget中的項目應更改為“ Option 2 00”,“ Option 2 01”,依此類推,直到循環結束。 但是,到目前為止,我的嘗試並沒有成功。

在此處輸入圖片說明

到目前為止,這是我的代碼:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Dialog(object):
    def __init__(self):
        self.lst = ['Option 1', 'Option 2', 'Option 3', 'Option 4']

    def _add_items_to_listWidget(self, text):
        for i in range(30):
            item=QtWidgets.QListWidgetItem()
            name= text+' %02d'%i
            item.setText(name)                        
            self.listWidget.addItem(item)

    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(240, 320)
        self.comboBox = QtWidgets.QComboBox(Dialog)
        self.comboBox.setGeometry(QtCore.QRect(10, 20, 221, 22))
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItems(self.lst)

        self.listWidget = QtWidgets.QListWidget(Dialog)
        self.listWidget.setGeometry(QtCore.QRect(10, 60, 221, 241))
        self.listWidget.setObjectName("listWidget")
        self.listWidget.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
        self._add_items_to_listWidget(str(self.comboBox.currentText()))

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Dialog = QtWidgets.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())

這是我第一次使用GUI,因此我在這方面的知識非常有限。 非常感謝。 任何建議將不勝感激。

問候,

阿諾德

您要添加以下信號和方法。

    self.comboBox.currentIndexChanged.connect(self.selectionchange)

def selectionchange(self,i):
    self.listWidget.clear() 
    self._add_items_to_listWidget(str(self.comboBox.currentText()))

像這樣:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Dialog(object):
    def __init__(self):
        self.lst = ['Option 1', 'Option 2', 'Option 3', 'Option 4']

    def _add_items_to_listWidget(self, text):
        for i in range(30):
            item=QtWidgets.QListWidgetItem()
            name= text+' %02d'%i
            item.setText(name)                        
            self.listWidget.addItem(item)

    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(240, 320)
        self.comboBox = QtWidgets.QComboBox(Dialog)
        self.comboBox.setGeometry(QtCore.QRect(10, 20, 221, 22))
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItems(self.lst)
        self.comboBox.currentIndexChanged.connect(self.selectionchange)

        self.listWidget = QtWidgets.QListWidget(Dialog)
        self.listWidget.setGeometry(QtCore.QRect(10, 60, 221, 241))
        self.listWidget.setObjectName("listWidget")
        self.listWidget.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
        self._add_items_to_listWidget(str(self.comboBox.currentText()))

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))

    def selectionchange(self,i):
        self.listWidget.clear() 
        self._add_items_to_listWidget(str(self.comboBox.currentText()))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Dialog = QtWidgets.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())

給出:

在此處輸入圖片說明

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM