2014-01-20 2 views
0

저는 Python 3.3 PyQt5로 작업하고 있습니다. 몇 가지 항목이 포함 된 QListView 위젯이 있습니다. 사용자가 항목을 두 번 클릭하고 편집하여 항목을 검색하여 새 값을 데이터베이스에 저장할 수있게하려고합니다. 그러나 편집이 끝나거나 유용한 어떤 신호도 찾을 수 없습니다.PyQt QListView 사용자 인터페이스에 의해 편집 된 항목 이후 항목 검색

class MainWin(QtWidgets.QMainWindow): 
    itemName = "" 
    def __init__(self, inheritance=None): 
     super(MainWin, self).__init__() 
     self.ui=uic.loadUi("MainWin.ui", self) 

     self.wordList = FileProc.WordStorage().readWordFile() 

     self.showListView() 
     self.itemName = "" 

    def showListView(self, file = 'wordlist.db'): 
     MainWin.wordList = FileProc.WordStorage().readWordFile(file) 

     model = QtGui.QStandardItemModel(self.listView) 

     for row in MainWin.wordList: 
      item = QtGui.QStandardItem(row) 
      model.appendRow(item) 

     self.listView.setModel(model) 

    def editWord(self): 
     itemIndex = self.listView.selectedIndexes() 
     MainWin.itemName = itemIndex[0].data() 

이러한 방식으로 목록이 표시됩니다. editWord() 메소드로 편집 된 단어를 검색하고 싶습니다. listView의 항목을 변경 한 후에 editWord()를 어떻게 실행할 수 있습니까?

+0

시도해 본 내용을 보시려면 코드 게시 –

답변

0

Model View 프로그래밍을 할 때 나는 무엇을 할 것입니까? 기본 모델을 사용하지 않고 모델을 만듭니다.

class ListMOdel(QtCore.QAbstractListModel): 
    def __init__(self , data=[] ,parent=None): 
     QtCore.QAbstractListModel.__init__(self,parent) 
     self.__data=data 

    def rowCount(self ,parent): 
     return len(self.__data) 

    def data(self,index,role): 

     if role == QtCore.Qt.DisplayRole: 
      row=index.row() 
      value = self.__data[row] 
      return value 

    def flags(self,index): 
     return QtCore.Qt.ItemIsEditable |QtCore.Qt.ItemIsEnabled| QtCore.Qt.ItemIsSelectable 

    def setData(self,index,value,role=QtCore.Qt.EditRole): 
     if role == QtCore.Qt.EditRole: 
      row= index.row() 
      self.__data[row]=value 
      return True 
     return False 

class MainWin(QtWidgets.QMainWindow): 
    itemName = "" 
    def __init__(self, inheritance=None): 
     super(MainWin, self).__init__() 
     self.ui=uic.loadUi("MainWin.ui", self) 

     self.wordList = FileProc.WordStorage().readWordFile() 

     self.showListView() 
     self.itemName = "" 

    def showListView(self, file = 'wordlist.db'): 
     MainWin.wordList = FileProc.WordStorage().readWordFile(file) 
     data=[] 
     for row in MainWin.wordList: 
      data.append(row) 

     model = ListMOdel(data) 
     self.listView.setModel(model) 

이것은 사용자 지정된 모델의 예입니다. setData 함수는 값을 업데이트합니다.

+0

AttributeError를주는 data() 메소드에서 'return value.name()'. 왜 .name()이 거기에 사용 되었습니까? – tugyan

+0

@tugyan : 편집했습니다. – TheCreator232

+0

하지만 사용자가 인터페이스 내의 목록에서 항목을 편집 할 때 어떻게 사용하는지 알 수 없습니다. 데이터를 설정하는 데 어려움이 없다. 사용자 인터페이스에 의해 항목의 값이 바뀌면 적절한 신호 나 비슷한 것을 찾을 수 없다. – tugyan