Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detect Ctrl+S ion QTextedit?

So, I'm making a QTextEdit that edits a text file. I got the loading and saving working fine with buttons. But I got the habit of pressing Ctrl+S to save every time I paste something into the textedit because I used that in Notepad before. So I've been trying to implement it. But I can't wrap my head around how to detect and execute my save function. Lets call it savetext.

I've been going around trying to get keyPressEvent to work, but I just don't understand how it works. So I've been pretty helpless in trying to learn it.

My heavily simplified code looks like this:

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

Now, how do I detect a key combination being detected in the QTextEdit, or anywhere in my program for that matter, and cause it to do savetext? In my case, Ctrl+S, though I'd just love a general explanation so I could apply it to any combo.

like image 655
Thomasedv Avatar asked Jun 18 '26 09:06

Thomasedv


2 Answers

Use QShortcut and QKeySequence

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_())
like image 157
eyllanesc Avatar answered Jun 20 '26 23:06

eyllanesc


You can probably use QShortcut, and right now it will activate only when textedit in focus. If you want to change the behavior please take a look here

Here is a example

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_())
like image 40
Achayan Avatar answered Jun 20 '26 22:06

Achayan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!