【发布时间】:2019-09-25 21:14:50
【问题描述】:
正如我在标题中提到的,我想连接两个 listiwdgets。(或者可以使用组合框) 我想要做的是,如果我点击第一个列表小部件的项目,第二个列表小部件的项目会改变。
尝试)我尝试连接两个列表小部件,如下所示
- 打印点击的项目
- 检查打印的文本是否相同。
问题)当我单击第一个列表小部件中的项目时,结果不是我想要的,并且无法在第二个列表小部件中列出新项目。
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_())
我真正想要的是,
- 点击listwidget1中的项目“a”,listwidget2有新项目“alpha, beta”
- 当我单击 listwidget1 中的另一个项目“b”时,listwidget2 有清除项目并有新项目“gamma, delta”
因为我是第一次使用python和pyqt5,所以问题很多。
【问题讨论】:
-
我什么都不懂,自己解释清楚。如果您单击第一个列表的项目 a,您希望在 list2 中发生什么?
-
在listwidget1中点击“a” -> 在listwidget2中出现“alpha”、”beta” 在listwidget2中点击“b” -> 在listwidget2中出现“gamma”、”delta” 根据listwidget1中的项目, listwidget2 有不同的项目。这就是我想要的。
-
当我双击一个项目时它适用于我。发出
QListQidget.itemActivated是否需要单击或双击取决于您的系统。如果您希望在单击某个项目时更改列表,您可以将self.listWidget.itemClicked连接到您的插槽而不是self.listWidget.itemActivated。 -
我又试了一次,还是不行。单击listwidget1中的“a”后,我单击listwidget1中的“b”以更改listwidget2的项目,但项目未更改。我认为使用 itemClicked 或 itemActivated 并不重要。
标签: python python-3.x pyqt pyqt5 qlistwidget