This is the first time, that I ever used PyQt5
and it's pretty good as well, so I built a text editor like thing with it, and I want to replace every typed character with another character in a QtPlainTextEdit
. Actually what I want to do is something like what this website does: lexilogos.com/keyboard/sinhala.htm
Here in this website, they have a simple textarea and when we type, it just replaces every english character with a sinhala character, and of course in a meaningful way. So I need to do the same thing with python-qt5.
My code:
Save New Duplicate & Edit Just Text Twitter
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'design.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QFont
from main import Execute
import sys
#from PyQt5.Qt import Qt
class Ui_MainWindow(object):
def selectionchange(self, index):
return i
def code_run(self):
text = self.code_input.document().toPlainText()
result, error = Execute('<stdin>', text)
if error:
print(error.as_string())
self.result.setPlainText(error.as_string())
elif result:
if len(result.elements) == 1:
print(repr(result.elements[0]))
_printed_ = open('_printed_','r').read()
if _printed_ != None or '':
self.result.setPlainText(_printed_)
else:
self.result.setPlainText(repr(result.elements[0]))
else:
print(repr(result))
if _printed_ != None or '':
_printed_ = open('_printed_','r').read()
self.result.setPlainTexbt(_printed_)
else:
self.result.setPlainText(repr(result))
def font_sizer(self):
size = self.font_size_increaser.value()
self.font_size.setText(f"Font size: {size}")
self.code_input.setFont(QFont("UN Abhya Bold",size))
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(737, 568)
font = QtGui.QFont()
font.setFamily("UN Abhya Bold")
font.setBold(True)
font.setItalic(True)
font.setWeight(75)
MainWindow.setFont(font)
self.centralwidget = QtWidgets.QWidget(MainWindow)
font = QtGui.QFont()
font.setFamily("UN Abhya Bold")
font.setBold(True)
font.setItalic(True)
font.setWeight(75)
self.centralwidget.setFont(font)
self.centralwidget.setObjectName("centralwidget")
self.run = QtWidgets.QPushButton(self.centralwidget)
self.run.setGeometry(QtCore.QRect(20, 450, 121, 41))
font = QtGui.QFont()
font.setFamily("UN Abhya Bold")
font.setPointSize(12)
font.setBold(True)
font.setItalic(False)
font.setWeight(75)
self.run.setFont(font)
self.run.setObjectName("run")
self.run.clicked.connect(self.code_run)
self.font_size_increaser = QtWidgets.QSlider(self.centralwidget)
self.font_size_increaser.setGeometry(QtCore.QRect(250, 460, 221, 19))
font = QtGui.QFont()
font.setFamily("UN Abhya Bold")
font.setBold(True)
font.setItalic(False)
font.setWeight(75)
self.font_size_increaser.setFont(font)
self.font_size_increaser.setOrientation(QtCore.Qt.Horizontal)
self.font_size_increaser.setObjectName("font_size_increaser")
self.font_size_increaser.valueChanged.connect(self.font_sizer)
self.font_size = QtWidgets.QLabel(self.centralwidget)
self.font_size.setGeometry(QtCore.QRect(340, 440, 91, 16))
font = QtGui.QFont()
font.setFamily("UN Abhya Bold")
font.setPointSize(10)
font.setBold(False)
font.setItalic(True)
font.setWeight(75)
self.font_size.setFont(font)
self.font_size.setObjectName("font_size")
self.code_input = QtWidgets.QPlainTextEdit(self.centralwidget)
self.code_input.setGeometry(QtCore.QRect(10, 10, 461, 421))
font = QtGui.QFont()
font.setFamily("UN Abhya Bold")
font.setPointSize(15)
font.setBold(True)
font.setItalic(False)
font.setWeight(75)
self.code_input.setFont(font)
self.code_input.setObjectName("code_input")
self.language = QtWidgets.QComboBox(self.centralwidget)
self.language.setGeometry(QtCore.QRect(540, 450, 151, 22))
font = QtGui.QFont()
font.setFamily("UN Abhya Bold")
font.setBold(True)
font.setItalic(False)
font.setWeight(75)
self.language.setFont(font)
self.language.setObjectName("language")
lang = open("_languages.lang","r").read().splitlines()
self.language.addItems(lang)
self.language.currentIndexChanged.connect(self.selectionchange)
self.result = QtWidgets.QPlainTextEdit(self.centralwidget)
self.result.setGeometry(QtCore.QRect(490, 10, 231, 421))
font = QtGui.QFont()
font.setFamily("UN Abhya Bold")
font.setPointSize(12)
font.setBold(True)
font.setItalic(True)
font.setWeight(75)
self.result.setFont(font)
self.result.setObjectName("result")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
font = QtGui.QFont()
font.setFamily("UN Abhya Bold")
font.setBold(True)
font.setItalic(True)
font.setWeight(75)
self.statusbar.setFont(font)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.run.setText(_translate("MainWindow", "RUN"))
self.font_size.setText(_translate("MainWindow", "Font Size"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
I think in order to achieve this, I need to constantly listen to all the characters typed in and first get the copy of previous characters to a variable and replace current characters and join them together or is there any other way? I don't know how to do it this way with these widgets and all.