As I mentioned at title, I want to connenct two listiwdgets.(or it is ok to use combobox) What I want to make is that If I click a item of first listwidget, items of second listwidget are changed.
Try) I tried to connect two listwidgets as below
- print clicked items
- check if printed text is same or not.
Problem) When I click a item in first listwidget, result is not what I want and fail to list-up new items in second listwidget.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def __init__(self):
self.list1 = ["a","b","c","d"]
self.list2 = ["alpha","beta","gamma","delta","epsilon","zeta","eta","theta","lota","kappa"]
self.list3 = ["alpha","beta"]
self.list4 = ["gamma","delta"]
self.list5 = ["epsilon","zeta","eta","theta","lota","kappa"]
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(433, 509)
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
self.buttonBox.setGeometry(QtCore.QRect(70, 450, 341, 32))
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.listWidget = QtWidgets.QListWidget(Dialog)
self.listWidget.setGeometry(QtCore.QRect(20, 10, 256, 192))
self.listWidget.setObjectName("listWidget")
self.listWidget.addItems(self.list1)
self.listWidget_2 = QtWidgets.QListWidget(Dialog)
self.listWidget_2.setGeometry(QtCore.QRect(20, 230, 256, 192))
self.listWidget_2.setObjectName("listWidget_2")
self.listWidget_2.addItems(self.list2)
self.retranslateUi(Dialog)
self.buttonBox.accepted.connect(Dialog.accept)
self.buttonBox.rejected.connect(Dialog.reject)
QtCore.QMetaObject.connectSlotsByName(Dialog)
self.listWidget.itemActivated.connect(self.itemActivated_event)
def itemActivated_event(self, item):
print(item.text())
if print(item.text()) is "a":
self.listWidget_2.clear()
self.listWidget_2.addItems(self.list3)
elif print(item.text()) is "b":
self.listWidget_2.clear()
self.listWidget_2.addItems(self.list4)
else :
self.listWidget_2.clear()
self.listWidget_2.addItems(self.list5)
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_())
What I really want is that,
- Clicking item "a" in listwidget1, listwidget2 has new item "alpha, beta"
- When I click another item "b" in listwidget1, listwidget2 has clear items and has new item "gamma, delta"
There are so many problem because it is my first time to use python and pyqt5.