子类化小部件以覆盖方法,同时保留原始方法功能
Subclass a widget to override method, while keeping original method functionality
我想用CTRL+C从QTableWidget复制数据。为此,我对 QTableWidget 进行了子类化,并重写了 keyPressEvent() 方法,效果很好。然而,这失去了有用的 keyPressEvent() 功能,例如使用方向键滚动 table.
有没有办法让原来的方法固有地实现一些额外的功能?
class SubQTableWidget(QtWidgets.QTableWidget):
def __init__(self, parent=None):
QtWidgets.QTableWidget.__init__(self, parent)
def keyPressEvent(self, event):
# inheret original keyPressEvent() functionality?
if (event.type() == QtCore.QEvent.KeyPress and
event.matches(QtGui.QKeySequence.Copy)):
self.copy_selection()
要覆盖某个方法,您必须了解它是否与新功能冲突。在这种情况下,QTableWidget 的 keyPressEvent 方法不会与 CTRL+C 快捷方式冲突,因为默认情况下它们对该键不执行任何操作,以避免丢失之前的功能,那么你必须调用父级的超级方法:
def keyPressEvent(self, event):
<b>super(SubQTableWidget, self).keyPressEvent(event)</b>
if event.matches(QtGui.QKeySequence.Copy)):
self.copy_selection()
如果你想以简单的方式处理 CTRL+C 那么你可以使用 QShortcut 所以不需要覆盖keyPressEvent 方法:
class SubQTableWidget(QtWidgets.QTableWidget):
def __init__(self, parent=None):
super(SubQTableWidget, self).__init__(parent)
QtWidgets.QShortcut(
QtGui.QKeySequence(QtGui.QKeySequence.Copy),
self,
activated=self.copy_selection,
context=QtCore.Qt.WidgetShortcut
)
我想用CTRL+C从QTableWidget复制数据。为此,我对 QTableWidget 进行了子类化,并重写了 keyPressEvent() 方法,效果很好。然而,这失去了有用的 keyPressEvent() 功能,例如使用方向键滚动 table.
有没有办法让原来的方法固有地实现一些额外的功能?
class SubQTableWidget(QtWidgets.QTableWidget):
def __init__(self, parent=None):
QtWidgets.QTableWidget.__init__(self, parent)
def keyPressEvent(self, event):
# inheret original keyPressEvent() functionality?
if (event.type() == QtCore.QEvent.KeyPress and
event.matches(QtGui.QKeySequence.Copy)):
self.copy_selection()
要覆盖某个方法,您必须了解它是否与新功能冲突。在这种情况下,QTableWidget 的 keyPressEvent 方法不会与 CTRL+C 快捷方式冲突,因为默认情况下它们对该键不执行任何操作,以避免丢失之前的功能,那么你必须调用父级的超级方法:
def keyPressEvent(self, event):
<b>super(SubQTableWidget, self).keyPressEvent(event)</b>
if event.matches(QtGui.QKeySequence.Copy)):
self.copy_selection()
如果你想以简单的方式处理 CTRL+C 那么你可以使用 QShortcut 所以不需要覆盖keyPressEvent 方法:
class SubQTableWidget(QtWidgets.QTableWidget):
def __init__(self, parent=None):
super(SubQTableWidget, self).__init__(parent)
QtWidgets.QShortcut(
QtGui.QKeySequence(QtGui.QKeySequence.Copy),
self,
activated=self.copy_selection,
context=QtCore.Qt.WidgetShortcut
)