【问题标题】:How can I record that QTreeView items have been double-clicked?如何记录 QTreeView 项目已被双击?
【发布时间】:2018-04-06 02:09:42
【问题描述】:

我有一个QTreeView,我监听doubleClicked 信号。然后,如果我双击该项目,我将在QTabwidget 中打开一个文本文件。如果我已经打开了item里面的文字,有什么好的记录方法吗?

我想也许我应该创建类似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?

【问题讨论】:

  • 我没听明白你有问题获得双击事件吗?
  • 对不起我的英语不好:),我的意思是我知道如何获得双击事件,但我想知道如果 qtreeview 中的项目已被点击,如何记录。
  • 没问题。记录是什么意思?
  • 但是程序执行完毕后需要保存这个状态吗?
  • 是的!我想保存状态,使用 DataFrame 或其他真/假列表是一个很好的解决方案吗?

标签: python pyqt qtreeview qstandarditemmodel


【解决方案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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    • 2016-03-30
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    相关资源
    最近更新 更多