【发布时间】:2014-09-26 03:13:28
【问题描述】:
我正在尝试在 QTableView 上实现“事物”。所以,我开始重写它的 keyPressEvent 方法,因为它到处都有描述:
if e.key() == QtCore.Qt.Key_F2 and self.tableau.hasFocus():
blabla
elif e.key() == QtCore.Qt.Key_Return and self.tableau.hasFocus():
blabla
#TEST
elif e.key() == QtCore.Qt.Key_Right:
print("right")
elif e.key() == QtCore.Qt.Key_Down:
print("down")
else:
print("waza")
我可以处理 F2 和 Return 事件,它们可以工作。但不是 Key_Down 事件! Key_right 也有效,但 Down 无效。我认为这是因为 QTableWidget “拦截”了一些事件。例如,当按下普通字母时,也不会“发出”任何事件。
我想访问所有事件(或至少是 Up 和 Down 事件),我该怎么做?
编辑:
我使用的视图基本上是一个QTableView,我稍微修改了一下:
class ViewPerso(QtGui.QTableView):
def __init__(self, parent=None):
super(ViewPerso, self).__init__(parent)
self.parent = parent
def currentChanged(self, current, previous):
index = current.sibling(current.row(), 4)
try:
if not index.data() or len(self.parent.vidsSelected()) > 1:
return
except AttributeError:
pass
self.clicked.emit(current)
self.scrollTo(current)
def keyboardSearch(self, search):
pass
我不使用 QTableWidget,它不符合我的要求。我还对视图委托进行了子类化,但通常(通常)不会有任何干扰。
这是我使用视图的方式:加载模型、代理,然后使用视图:
self.modele = ModelPerso()
self.modele.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)
self.modele.setTable("videos")
self.modele.select()
self.proxy = QtGui.QSortFilterProxyModel()
self.proxy.setSourceModel(self.modele)
self.tableau = ViewPerso(self)
self.tableau.setModel(self.proxy)
self.tableau.setItemDelegate(ViewDelegate(self))
我不知道按键在哪里结束,现在,它们就消失了。我认为(我认为),每个小部件都有处理按键事件的方法,也许 QTableView 会忽略上下键?
【问题讨论】:
-
请发布更多代码:您是否有单独的 tableView 和 tableWidget,或者您在谈论其他内容?你知道按键最终在哪里,还是消失了?
-
完成。也许我应该覆盖视图类中的 keypressEvent 方法?
标签: python pyqt qtableview