python - 如何让QTableView只有在双击时才进入编辑模式

标签 python model pyqt qtableview

设置一个 Qt.ItemIsEnabled 标志使 QTableView 项目可编辑。 要进入项目的编辑模式,用户只需双击它即可。编辑项目的另一种方法是选择它并按键盘键。 如何禁用进入项目编辑模式的第二种方式?

这是显示选中项目的 QTableView 的图像:

enter image description here

一旦用户按下键盘键,所选项目就已经处于编辑模式:

enter image description here

这种默认的 QTableView 行为使得无法定义功能快捷方式,因为 QListView 的项目没有触发链接到快捷方式的功能,而是进入了编辑模式....如何使 QTableView 仅在 double 上进入编辑模式-点击?

from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys

class Model(QAbstractTableModel):
    def __init__(self, parent=None, *args):
        QAbstractTableModel.__init__(self, parent, *args)
        self.items = ['Item_A_001','Item_A_002','Item_B_001','Item_B_002']

    def rowCount(self, parent=QModelIndex()):
        return len(self.items)       
    def columnCount(self, parent=QModelIndex()):
        return 1

    def data(self, index, role):
        if not index.isValid(): return QVariant()
        elif role != Qt.DisplayRole:
            return QVariant()

        row=index.row()
        if row<len(self.items):
            return QVariant(self.items[row])
        else:
            return QVariant()
    def flags(self, index):
        return Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsEditable

class MyWindow(QWidget):
    def __init__(self, *args):
        QWidget.__init__(self, *args)

        tableModel=Model(self)               

        self.view=QTableView(self) 
        self.view.setModel(tableModel)
        self.view.horizontalHeader().setResizeMode(QHeaderView.Stretch)

        layout = QVBoxLayout(self)
        layout.addWidget(self.view)
        self.setLayout(layout)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = MyWindow()
    w.show()
    sys.exit(app.exec_())

最佳答案

我认为更好的解决方案是设置您想要的编辑触发器。由于 QTableView 继承自 QAbstractItemView,您可以使用 void setEditTriggers(EditTriggers triggers)。 所以你的自定义 QTableView 的代码应该是这样的:

from PyQt4.QtGui import QAbstractItemView, QTableView

class CustomQTableView(QTableView):    
    def __init__(self, *args):
        super().__init__(*args)
        self.setEditTriggers(QAbstractItemView.NoEditTriggers |
                             QAbstractItemView.DoubleClicked)

关于python - 如何让QTableView只有在双击时才进入编辑模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28186118/

相关文章:

python - sqlalchemy 无法获取过滤器选项中 bool 字段的数据(用 is 指定)

ruby-on-rails - 没有迁移表的 Rails STI 模型

mysql - codeigniter - 如果模型 mysql 查询失败,则将 flashdata 发送回用户

ruby-on-rails - 递归包括所有模型子目录

python - QT QFileSystemWatcher

python - 在 PyQt 中获取 QScrollArea 中视口(viewport)的大小

python - Pandas:连接数据框中的两列(不创建两列)

python - 为什么偶数 Ns 比奇数 Ns 花费更长的时间?

python - 如何通过 python 在线连接到 quickbooks?

c++ - 自定义 QDockWidget 显示