我想更改QTableWidget的Key_Delete行为,但由于使用了Designer,所以我不想对带有表单的py文件进行任何更改。因此,不是像这样重新实现QTableWidget,而是这样回答:How to implement MousePressEvent for a Qt-Designer Widget in PyQt我做如下操作:
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_删除. 我已经把最后一行改成这样:
^{pr2}$但它不起作用。在
首先:“但它不起作用”通常不够描述。你期望什么样的行为?你看到的是什么行为?是否有错误消息?在
不过,在这里我很容易看出一些错误。在
您正在重写该方法QTableWidget.keyPressEvent,它需要2个参数:(QTableWidget实例,event)。但在上面显示的代码中,用于重写它的函数只接受1个参数(第一个参数“self”不计算在内,因为它是自动提供的)。
既然你已经准备好了QTableWidget.keyPressEvent= 自我测试,您还试图从在中调用此函数自我测试(),您创建了一个无限递归函数。
当你打电话的时候QTableWidget.keyPressEvent,传入的第一个参数(self)是QMainWindow对象。然而,正如我前面提到的,这个函数需要一个QTableWidget作为它的第一个参数。
由于您是在类级别重写此方法,所有QTableWidgets都将被迫使用相同的keyPressEvent函数(这将是非常有问题的)。相反,您应该只重写特定小部件的方法:
self.ui.tableWidget.keyPressEvent = self.test
(还请注意tableWidget.keyPressEvent不同于QTableWidget.keyPressEvent)示例:
最后,另一种(可能更简洁)的方法是创建QTableWdget的子类,并在Designer中将表小部件“升级”到新类中。在
相关问题 更多 >
编程相关推荐