我想改變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