检测Ctrl + S离子QTextedit?

时间:2017-03-24 23:16:36

标签: python python-3.x pyqt pyqt5 qtextedit

所以,我正在制作一个编辑文本文件的QTextEdit。我用按钮加载并保存工作正常。但我习惯按 Ctrl + S 来保存每次我将东西粘贴到textedit中,因为我之前在记事本中使用过它。所以我一直在努力实现它。但我无法理解如何检测和执行我的保存功能。让我们称之为savetext

我一直在尝试让keyPressEvent工作,但我只是不明白它是如何工作的。所以我在尝试学习它时一直很无助。

我严格简化的代码如下所示:

class GUI(QProcess):
    def init etc...
        "Button creations and connect to save/load function"
        self.textedit=QTextEdit()

    def savetext(self):
        code

    def loadtext(self):
        code

现在,如何在QTextEdit或我的程序中的任何位置检测到检测到的组合键,并使其savetext?在我的情况下, Ctrl + S ,虽然我只是喜欢一般的解释,所以我可以将它应用于任何组合。

2 个答案:

答案 0 :(得分:3)

使用QShortcutQKeySequence

from PyQt5.QtWidgets import QApplication, QTextEdit, QShortcut
from PyQt5.QtGui import QKeySequence
import sys

def slot():
    print("Ctrl+S")


app = QApplication(sys.argv)
textedit=QTextEdit()
shortcut = QShortcut(QKeySequence("Ctrl+S"), textedit)
shortcut.activated.connect(slot)

textedit.show()
sys.exit(app.exec_())

答案 1 :(得分:1)

您可以使用QShortcut,现在只有当textedit处于焦点时它才会激活。如果您想更改行为,请查看here

这是一个例子

import sys
from PyQt4 import QtGui, QtCore

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        layout = QtGui.QVBoxLayout(self)
        self.edit = QtGui.QTextEdit()
        layout.addWidget(self.edit)
        self.button = QtGui.QPushButton('Test')
        layout.addWidget(self.button)
        foo = QtGui.QShortcut(QtGui.QKeySequence("Ctrl+S"), self.edit, self.saveCall, context=QtCore.Qt.WidgetShortcut)

    def saveCall(self):
        self.edit.append('Please save me')

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())