我想改变QTableWidget的Key_Delete的行为,但由于使用设计器,我不想在窗体中对py文件进行任何更改。因此,而不是重新实现QTableWidget的像它这样的回答:How to implement MousePressEvent for a Qt-Designer Widget in PyQt我做这样的事情:事件 - 只捕捉Qt.Key_Delete
class MyForm(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.tableWidget.__class__.keyPressEvent = self.test
def test(self,event):
if event.key() == Qt.Key_Delete:
print "test"
return QTableWidget.keyPressEvent(self, event)
的问题是,我不知道如何保持其它按键比Qt.Key_Delete的原始行为。 我已经改变最后一行,像这样:
return QtGui.QTableWidget.keyPressEvent(self, event)
return QtGui.QTableWidget.event(self, event)
但它不起作用。
谢谢你的回答!通过“但它不起作用”我的意思是“我不知道如何保持除Qt.Key_Delete之外的其他键的原始行为”。我的例子,没有最后的回报只适用于删除键。所以当我按下QTableWidget中的其他键而不是Delete键时(箭头键不起作用)。我想在** class **级别覆盖此方法。所以问题是:我应该在我的示例代码中更改哪些内容以仅抑制Key_Delete事件并传递其他事件? – domi 2011-05-09 14:58:18
如果你愿意,你可以重载类方法,你只需要1)确保你重写它的函数具有正确的签名,并且2)在其他地方存储对原始函数的引用,以便它仍然可以被调用其他键。我很好奇:你为什么要在课堂上而不是在实例上重写? – Luke 2011-05-12 15:41:00
对不起,我无法发表评论。您能告诉我如何使用我的代码实现第二点吗?为什么要在班级级别上进行重写:两个原因 - 我想尽可能地改变代码, Qt Designer,其次,我想在我的应用程序中的每个QTableWidget中“保留”已更改的行为。我知道子类化是可能的,但这意味着额外的代码和需要重写每个属性(在Qt Designer中设置)从一个类到另一个子类。 – domi 2011-05-28 22:37:48