如何同时处理keyPressEvent Escape和Ctrl + C(PySide)?

时间:2013-08-19 07:57:00

标签: python qt pyside

在Pyside程序中,我想在tableWidget中使用Ctrl + C进行复制。

我在QtDesigner中添加了一个捷径,但它不起作用。

在mainGui.py中

self.actionCopy.setShortcut(QtGui.QApplication.translate("mainDialog", "Ctrl+C", None, QtGui.QApplication.UnicodeUTF8))

我发现密钥是由重写的keyPressEvent捕获的(仅适用于Escape)。 它可以捕获单个“Key_Control”但无法捕获Ctrl + C. 以下是我的代码:

def keyPressEvent(self, event):
    # Re-direct ESC key to closeEvent
    print(event)
    if event.key() == Qt.Key_Escape:
        self.close()
    elif event.key() == QKeySequence.Copy:
        self.actionCopy.trigger()

如何让它捕获Ctrl + C或让它传递给QtDesigner的快捷方式

2 个答案:

答案 0 :(得分:1)

此代码可读

if QKeySequence(event.key()+int(event.modifiers())) == QKeySequence("Ctrl+C"):
    self.actionCopy.trigger()

答案 1 :(得分:0)

您不必覆盖keyPressEvent。你开始使用快捷方式,但我需要更多代码来告诉你哪里出错了。工作流程应为:

  1. 从Ctrl + C

  2. 创建操作
  3. 将该操作与主要小部件的功能

  4. 相关联
  5. 在与Ctrl + C连接的主窗口小部件的功能中,您收集所需的所有信息并将它们放在剪贴板中。

  6. 但是,正如我所说,我需要更多代码,以便我能够发现问题。

    更新

    在代码中的第68行之后,添加以下行:

    self.tableWidget.addAction(self.actionCopy)
    

    您还必须将操作添加到tableWidget,而不仅仅是主窗口。