Как я могу записать, что элементы QTreeView дважды щелкнули?
У меня есть QTreeView
и я слушаю doubleClicked
сигнал. Затем, если я дважды щелкните элемент, я открою текстовый файл в QTabwidget
, Есть ли хороший способ записи, если я уже открыл текст из элемента?
Я думаю, может быть, я должен создать что-то вроде DataFrame
чтобы записать это, но я не уверен, что это хорошее решение. Какие-либо предложения?
class PrjTreeModel(QStandardItemModel):
def __init__(self, parent,data):
super(PrjTreeModel, self).__init__(parent)
self.items = datapd.DataFrame([['HHH','BBB','RRR']],columns=['UserId','ProjectId','Status'])
self.refreshItems()
def refreshItems(self):
prjId = self.items['ProjectId']
child = ['A','B','C']
for i,row in prjId.iteritems():
parent = QtGui.QStandardItem(row)
for j in child:
parent.appendRow(QtGui.QStandardItem(j))
self.appendRow(parent)
def flags(self, index):
if not index.isValid():
return QtCore.Qt.ItemIsEnabled
return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable
def headerData(self, section, orientation, role=QtCore.Qt.DisplayRole):
if (role == QtCore.Qt.DisplayRole) and (orientation == QtCore.Qt.Horizontal) and (self.items is not None):
return self.items['UserId'][0]
else:
return QStandardItemModel.headerData(self, section, orientation, role)
class MainWindow(QMainWindow):
[...]
qTreeView.setModel(PrjTreeModel())
qTreeView.doubleClicked.connect(self.dClicked)
self dClicked(self):
[...]
## open txtfile to add in QTabWidget
## when doubled clicked, I don't want to open same item again
## how should I check the state?
1 ответ
Вы можете установить флажок для элемента с двойным щелчком, используя пользовательскую роль:
class MainWindow(QMainWindow):
def __init__(self):
...
qTreeView.setModel(PrjTreeModel())
qTreeView.doubleClicked.connect(self.dClicked)
def dblClicked(self, index):
item = index.model().itemFromIndex(index)
if not item.data(Qt.UserRole + 1):
item.setData(True, Qt.UserRole + 1)
print('open txt file:', item.text())
else:
print('already double-clicked')