2017-04-24 4 views
0

내 프로젝트에는 동일한 항목이있는 두 개의 개별 QListWidgets이 관련되어 있습니다. 내 코드는 첫 번째 목록에는 항목을 추가하지만 두 번째 목록에는 항목을 추가하지 않습니다. 누군가 이전에이 작업을 수행 했어야하지만 검색 결과는 중복 항목을 제거하기위한 것입니다.동일한 항목을 두 개의 별도 QListWidgets에 추가하십시오.

언제든지 새 항목을 만들지 않고 두 개의 QListWidgets에 하나의 항목을 추가 할 수 있습니까? 이 문제를 해결할 수는 있지만 뭔가를 배울 수있는 기회 인 것 같습니다. 같은 항목을 공유

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

import sys 
from PyQt5 import QtWidgets 
from PyQt5.QtWidgets import (QWidget, QApplication, QListWidget) 

class Example(QWidget): 

    def __init__(self): 
     super().__init__() 
     self.initUI() 


    def initUI(self): 

     self.lstOne = QListWidget(self) 
     self.lstTwo = QListWidget(self) 
     self.lstTwo.move(0, 250) 

     listItems = ["one", "two", "three", "four"]  

     for item in listItems: 
      itm = QtWidgets.QListWidgetItem(item); 
      self.lstOne.addItem(itm); 
      self.lstTwo.addItem(itm);  #fills the first but not the second 


     self.setGeometry(300, 300, 500, 500) 
     self.show() 


if __name__ == '__main__': 

    app = QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 

답변

2

두리스트는 QListView 개체를 공유하는 모델을 사용하기위한 좋은 사용 사례입니다 : 여기

for item in listItems: 
    itm = QtWidgets.QListWidgetItem(item); 
    self.lstOne.addItem(itm); 
    self.lstTwo.addItem(itm);   #fills the first but not the second 

모든 코드입니다. 작은리스트를 들어 당신과 같이, QStandardItems 포함하는 QStandardItemModel을 사용할 수 있습니다

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

import sys 
from PyQt5 import QtWidgets, QtGui 
from PyQt5.QtWidgets import (QWidget, QApplication, QListView) 

class Example(QWidget): 

    def __init__(self): 
     super().__init__() 
     self.initUI() 


    def initUI(self): 

     self.lstOne = QListView(self) 
     self.lstTwo = QListView(self) 
     self.lstTwo.move(0, 250) 

     model = QtGui.QStandardItemModel(parent=self) 

     listItems = ["one", "two", "three", "four"]  

     for item in listItems: 
      itm = QtGui.QStandardItem(item) 
      model.appendRow(itm) 

     self.lstOne.setModel(model) 
     self.lstTwo.setModel(model) 

     self.setGeometry(300, 300, 500, 500) 
     self.show() 


if __name__ == '__main__': 

    app = QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 

을 당신이 (QAbstractListModel에서 파생) 자신의 모델 클래스를 구현하기 위해 고려해야 할 큰 목록이있는 경우. 이렇게하면 모든 목록 요소의 항목 클래스를 미리 만들 필요가 없으므로 훨씬 더 우수한 성능을 얻을 수 있다는 이점이 있습니다.

당신은 내가 뭔가를 배울 것을 알고, here

+0

가 Qt의 모델 - 뷰 프로그램에 대한 자세한 내용을보실 수 있습니다. 감사! 그게 더 좋은 방법 같아. 호기심 때문에 목록 위젯에 항목이 추가되지 않은 이유는 무엇입니까? – jshort

+0

'QListWidgetItem's은 단일 'QListWidget'에서 사용되도록 설계 되었기 때문에 (항목에서 [참조] (http://doc.qt.io/qt-4.8/qlistwidgetitem.html#listWidget)을 얻을 수도 있습니다 항목이 들어있는 목록 위젯으로). 따라서 두 개의'QListWidgets'에서이 함수를 사용하려고하면 정의되지 않은 동작이 발생합니다. BTW 내 게시물을 귀하의 질문에 대한 답변을 누른 다음 답변으로 표시하십시오. – titusjan

+0

호기심과 대답의 깊이를 만족시켜 주셔서 감사합니다. 답변으로 표시되고 투표 됨. – jshort

관련 문제