2014-01-27 7 views
0

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

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

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

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

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

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

+2

Не могли бы вы опубликовать пример кода? –

+0

Erm, дело в том, что у меня нет кода, поскольку я был полностью потерян в том, как это сделать в первую очередь ... Единственный код, который у меня есть, это код для моих 2 списков, где они являются localDir = os .listdir ("/ Desktop/Proj") и self.jobList.addItems (localDir) Это то же самое кодирование для другого списка – yan

ответ

0

OK вот пример кода, как вы могли бы сделать то, что вы хотите, это очень простой, но вы можете получить представление в функциях 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_() 
+0

Привет, xndrme, спасибо, например. Я попробую как можно скорее посмотреть, как это происходит, когда я вернусь в школу и посмотрю, как это происходит. Кстати, могу ли я спросить, что означает «disconnect (g)»? Это, отключить def g()? – yan

0

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^