【问题标题】:How to change items of second listwidget when I clicked first listwidget item [duplicate]当我单击第一个 qlistwidget 项目时如何更改第二个 qlistwidget 的项目[重复]
【发布时间】:2019-09-25 21:14:50
【问题描述】:

正如我在标题中提到的,我想连接两个 listiwdgets。(或者可以使用组合框) 我想要做的是,如果我点击第一个列表小部件的项目,第二个列表小部件的项目会改变。

尝试)我尝试连接两个列表小部件,如下所示

  1. 打印点击的项目
  2. 检查打印的文本是否相同。

问题)当我单击第一个列表小部件中的项目时,结果不是我想要的,并且无法在第二个列表小部件中列出新项目。

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_())

我真正想要的是,

  1. 点击listwidget1中的项目“a”,listwidget2有新项目“alpha, beta”
  2. 当我单击 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


【解决方案1】:

你有一个小错误:

而不是:

if (item.text()) is "a":

使用:

if (item.text()) == "a": 

Python中==和is运算符的区别

== operator 比较操作数和检查的值 为了价值平等。而is operator 检查两者是否 操作数是否引用同一个对象。

【讨论】:

  • 非常感谢!!您的解决方案效果很好!
  • 不客气。我很高兴能帮上忙:)
猜你喜欢
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多