【问题标题】:Enable a single selection between 2 Lists启用 2 个列表之间的单个选择
【发布时间】:2014-01-27 14:43:55
【问题描述】:

我遇到了这个问题,希望有人能帮助我。

我正在尝试创建一个有 2 个 QListWidgets 的情况,例如 List01List02,它们包含以下内容。

List01 = [T01, T02, T03]
List02 = [P01, P02, P03]

我希望用户在List01 中选择一个项目(T01),因此在List02 中,不会选择(突出显示)任何项目,这意味着用户是否将鼠标悬停在List02并选择一个项目(P02)List01 中的选择将消失,它将是List02 中选择的项目(P02)

目前,我遇到了问题,我的程序能够在 2 个列表中选择一个项目,但我不确定如何执行上述操作。

有人可以指导我吗? 非常感谢提前

【问题讨论】:

  • 你能发布一个示例代码吗?
  • 呃,问题是我没有代码,因为我一开始就完全迷失了如何去做......到目前为止我唯一的代码是我的 2列表 localDir = os.listdir("/Desktop/Proj") 和 self.jobList.addItems(localDir) 其他列表的编码也相同

标签: python pyqt4 qlistwidget


【解决方案1】:

好的,这里有一个示例代码,说明如何做你想做的事,它非常基本,但你可以在函数 fg 中得到这个想法,希望它有效:

import PyQt4.QtGui as gui


app = gui.QApplication([]) 


w = gui.QWidget()
l = gui.QHBoxLayout(w)
w.setLayout(l)

lis1 = gui.QListWidget()
lis2 = gui.QListWidget()

lis1.addItems(["1","2","3"])
lis2.addItems(["4","5","6"])

def f():    
    lis2.itemSelectionChanged.disconnect(g)    
    for item in lis2.selectedItems():
        lis2.setItemSelected(item,False)
    lis2.itemSelectionChanged.connect(g)


def g():
    lis1.itemSelectionChanged.disconnect(f)    
    for item in lis1.selectedItems():
        lis1.setItemSelected(item,False)    
    lis1.itemSelectionChanged.connect(f)


print dir(lis1.itemSelectionChanged)

lis1.itemSelectionChanged.connect(f)
lis2.itemSelectionChanged.connect(g)

l.addWidget(lis1)
l.addWidget(lis2)

w.show()


app.exec_()

【讨论】:

  • 嗨 xndrme,谢谢你的例子。回到学校后,我会尽快尝试看看情况如何,看看情况如何。顺便问一下,'disconnect(g)' 是什么意思?是吗,断开def g()?
【解决方案2】:

itemSelectionChanged() 信号从一个QListWidget 连接到另一个clearSelection 插槽。

使用 QtDesigner 生成的示例:

# -*- coding: utf-8 -*-

from PyQt4 import QtCore, QtGui

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(214, 158)
        self.gridLayout = QtGui.QGridLayout(Form)
        self.gridLayout.setObjectName("gridLayout")
        self.listWidget = QtGui.QListWidget(Form)
        self.listWidget.setObjectName("listWidget")
        item = QtGui.QListWidgetItem()
        item.setText("T01")
        self.listWidget.addItem(item)
        item = QtGui.QListWidgetItem()
        item.setText("T02")
        self.listWidget.addItem(item)
        item = QtGui.QListWidgetItem()
        item.setText("T03")
        self.listWidget.addItem(item)
        self.gridLayout.addWidget(self.listWidget, 0, 0, 1, 1)
        self.listWidget_2 = QtGui.QListWidget(Form)
        self.listWidget_2.setObjectName("listWidget_2")
        item = QtGui.QListWidgetItem()
        item.setText("P01")
        self.listWidget_2.addItem(item)
        item = QtGui.QListWidgetItem()
        item.setText("P02")
        self.listWidget_2.addItem(item)
        item = QtGui.QListWidgetItem()
        item.setText("P03")
        self.listWidget_2.addItem(item)
        self.gridLayout.addWidget(self.listWidget_2, 0, 1, 1, 1)

        # This are the important lines.
        QtCore.QObject.connect(self.listWidget, QtCore.SIGNAL("itemSelectionChanged()"), self.listWidget_2.clearSelection)
        QtCore.QObject.connect(self.listWidget_2, QtCore.SIGNAL("itemSelectionChanged()"), self.listWidget.clearSelection)
        QtCore.QMetaObject.connectSlotsByName(Form)

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    Form = QtGui.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

【讨论】:

    【解决方案3】:

    您可以以此代码为例:

    from PyQt4 import QtCore, QtGui
    import sys
    
    app = QtGui.QApplication(sys.argv)
    
    class MyApp(QtGui.QDialog):
      def __init__(self):
        super(MyApp, self).__init__()
    
        layout = QtGui.QHBoxLayout()
    
        qlist1 = QtGui.QListWidget()
        qlist1.addItems(["elem1","elem2","elem3"])
        layout.addWidget(qlist1)
    
        qlist2 = QtGui.QListWidget()
        qlist2.addItems(["elem4","elem5","elem6"])
        layout.addWidget(qlist2)
    
        # This dict will be used when a list is clicked
        # to clear the selection of the other list
        self.list_dict = {}
        self.list_dict[qlist1] = qlist2
        self.list_dict[qlist2] = qlist1
    
        qlist1.clicked.connect(self.list_clicked)
        qlist2.clicked.connect(self.list_clicked)
    
        self.setLayout(layout)
        self.show()
    
      def list_clicked(self):
        self.list_dict[self.sender()].clearSelection()
    
    myApp = MyApp()
    sys.exit(app.exec_())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多