Print from QLineEdit

-1

i have a QLineedit which i want to print out the user input once the button is pressed but it keeps throwing out this error

Process finished with exit code -1073740791 (0xC0000409)

from PyQt5.QtWidgets import QMessageBox
from PyQt5 import QtCore, QtGui, QtWidgets
import webbrowser


def subscribe_clicked():
    print(sub.text())
    msg = QMessageBox()
    msg.setWindowTitle("Subscribe")
    msg.setText("You will now recieve updates")
    msg.setIcon(QMessageBox.Question)
    msg.exec_()

class Ui_MainWindow(object):

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(723, 785)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.join = QtWidgets.QLabel(self.centralwidget)
        self.join.setObjectName("join")
        self.gridLayout_2.addWidget(self.join, 1, 0, 1, 1)
        self.sub = QtWidgets.QLineEdit(self.centralwidget)
        self.sub.setObjectName("sub")
        self.subscribe = QtWidgets.QPushButton(self.centralwidget)
        self.subscribe.clicked.connect(subscribe_clicked)
        self.subscribe.setObjectName("subscribe")
        self.gridLayout_2.addWidget(self.subscribe, 3, 0, 1, 1)
        self.sub.raise_()
        self.subscribe.raise_()
        self.sub.raise_()
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 723, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
      
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

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_())

if i put in a manual entry it prints fine , but it wont call the information from the QlineEdit text box

pyqt
pyqt5
asked on Stack Overflow May 14, 2021 by DanS • edited May 14, 2021 by DanS

1 Answer

0

The reason for error is in function

def subscribe_clicked():
    print(sub.text())
    msg = QMessageBox()
    msg.setWindowTitle("Subscribe")
    msg.setText("You will now recieve updates")
    msg.setIcon(QMessageBox.Question)
    msg.exec_()

In line print(sub.text()) the sub is undefined since it doesn't exist out of Ui_MainWindow. Therefore it throws an error:

Process finished with exit code -1073740791 (0xC0000409)

We can fix the problem by passing sub which is a QLineEdit in MainWindow class to subscribe_clicked() function. By doing the following:

  1. Pass parameter to function with lambda by changing:

    self.subscribe.clicked.connect(subscribe_clicked)

    To

    self.subscribe.clicked.connect(lambda:subscribe_clicked(self.sub))

  2. Add parameter to function

    def subscribe_clicked(sub):
        print(sub.text())
        msg = QMessageBox()
        msg.setWindowTitle("Subscribe")
        msg.setText("You will now recieve updates")
        msg.setIcon(QMessageBox.Question)
        msg.exec_()
    

Full Code:

from PyQt5.QtWidgets import QMessageBox
from PyQt5 import QtCore, QtGui, QtWidgets
import webbrowser


def subscribe_clicked(sub):
    print(sub.text())
    msg = QMessageBox()
    msg.setWindowTitle("Subscribe")
    msg.setText("You will now recieve updates")
    msg.setIcon(QMessageBox.Question)
    msg.exec_()


class Ui_MainWindow(object):

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(723, 785)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.join = QtWidgets.QLabel(self.centralwidget)
        self.join.setObjectName("join")
        self.gridLayout_2.addWidget(self.join, 1, 0, 1, 1)
        self.sub = QtWidgets.QLineEdit(self.centralwidget)
        self.sub.setObjectName("sub")
        self.subscribe = QtWidgets.QPushButton(self.centralwidget)
        self.subscribe.clicked.connect(lambda:subscribe_clicked(self.sub))
        self.subscribe.setObjectName("subscribe")
        self.gridLayout_2.addWidget(self.subscribe, 3, 0, 1, 1)
        self.sub.raise_()
        self.subscribe.raise_()
        self.sub.raise_()
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 723, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        QtCore.QMetaObject.connectSlotsByName(MainWindow)


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_())
answered on Stack Overflow May 14, 2021 by BlueGhost

User contributions licensed under CC BY-SA 3.0