首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使QTableView只在双击时进入编辑模式

如何使QTableView只在双击时进入编辑模式
EN

Stack Overflow用户
提问于 2015-01-28 06:37:21
回答 2查看 9.6K关注 0票数 2

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

下面的图片显示了所选项目的QTableView:

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

这种默认的QTableView行为使得无法定义函数快捷方式,因为没有触发链接到快捷方式的函数,而是QListView的项进入编辑模式.如何使QTableView只在双击时进入编辑模式?

代码语言:javascript
复制
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_())
EN

Stack Overflow用户

发布于 2015-12-01 21:54:38

我认为更好的解决方案是设置所需的编辑触发器。由于QTableView继承自QAbstractItemView,您可以使用void setEditTriggers(EditTriggers触发器)。因此,定制QTableView的代码如下所示:

代码语言:javascript
复制
from PyQt4.QtGui import QAbstractItemView, QTableView

class CustomQTableView(QTableView):    
    def __init__(self, *args):
        super().__init__(*args)
        self.setEditTriggers(QAbstractItemView.NoEditTriggers |
                             QAbstractItemView.DoubleClicked)
票数 8
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28186118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档