Включить одиночный выбор между 2 списками

Я столкнулся с этой проблемой, и я надеюсь, что кто-то может мне помочь.

Я пытаюсь создать ситуацию, когда есть 2 QListWidgets, например, List01 и List02, и они содержат следующее.

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

Я хотел, чтобы пользователь выбрал элемент (T01) в List01, и, следовательно, в List02 выбор (выделение) каких-либо элементов не будет выполняться, то есть если пользователь наведет курсор на List02 и выберет элемент (P02), выбор в List01 будет исчезнет, ​​и это будет элемент (P02), выбранный в List02.

В настоящее время у меня возникает проблема, когда моя программа может выбрать элемент в 2 списках, и я не уверен, как это сделать.

Может ли кто-нибудь любезно направить меня? Спасибо заранее


person yan    schedule 27.01.2014    source источник
comment
Не могли бы вы опубликовать пример кода?   -  person Alvaro Fuentes    schedule 27.01.2014
comment
Э-э, дело в том, что у меня нет кода, так как я полностью потерялся в том, как это сделать в первую очередь... Единственный код, который у меня есть, это код для моих 2 списков, где они localDir = os. listdir(/Desktop/Proj) и self.jobList.addItems(localDir) Это то же самое кодирование и для другого списка   -  person yan    schedule 27.01.2014


Ответы (3)


Хорошо, вот пример кода того, как вы можете делать то, что хотите, он очень простой, но вы можете получить представление о функциях f и g, надеюсь, это сработает:

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_()
person Alvaro Fuentes    schedule 27.01.2014
comment
Привет xndrme, спасибо за пример. Я попробую это как можно скорее, чтобы посмотреть, как это пойдет, когда я вернусь в школу, и посмотреть, как это пойдет. Кстати, могу я спросить, что означает «disconnect(g)»? Отключить def g()? - person yan; 27.01.2014

Подключите сигнал 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_())
person Raydel Miranda    schedule 27.01.2014

Вы можете взять пример с этим кодом:

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_())
person Frodon    schedule 27.01.2014