[Tutor] What is the correct way of signalling and slots in PyQt5?

Ali M adeadmarshal at gmail.com
Wed Apr 3 04:57:32 EDT 2019


The application crashes without errors every time any signal is called on
the widgets. how should i signal to my functions?
for example these signals make the app crash:
self.lineEdit.textChanged.connect(self.edit_input)
or
self.listWidget.clicked.connect(self.listClicked)

here is the full code:
from PyQt5 import QtCore, QtGui, QtWidgets
import sqlite3 as sqlite
import sys

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        super().__init__()
        self.initUi()

    def initUi(self):

        self.centralwidget = QtWidgets.QWidget(MainWindow)

        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.textChanged.connect(self.edit_input)

        self.listWidget = QtWidgets.QListWidget(self.centralwidget)
        self.listWidget.clicked.connect(self.listClicked)

        self.textEdit = QtWidgets.QTextEdit(self.centralwidget)

        MainWindow.setCentralWidget(self.centralwidget)

        self.db =
sqlite.connect(r'C:\Users\deadmarshal\PycharmProjects\Tim\test.db')
        self.cur = self.db.cursor()
        self.result = self.cur.execute("SELECT Esperanto FROM Words ORDER
BY Esperanto")
        self.items = self.result.fetchall()

        for i in self.items:
            self.listWidget.insertItems(0, i)

    def listClicked(self):
        index = self.listWidget.currentRow()
        results = self.cur.execute("SELECT English FROM Words WHERE
Esperanto = ?", (index,))
        for row in results:
            self.textEdit.clear()
            self.textEdit.insertPlainText(row)

    def edit_input(self):
        word_to_esp = {'gx': 'ĝ', 'cx': 'ĉ', 'hx': 'ĥ', 'jx': 'ĵ', 'ux':
'ŭ', 'sx': 'ŝ'}
        user_input = self.lineEdit.text()
        user_input = user_input.lower()
        for i in word_to_esp:
            if user_input.__contains__(i):
                a = user_input.replace(i, word_to_esp[i])
                return self.lineEdit.set(a)


if __name__ == "__main__":

    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())


More information about the Tutor mailing list