1

I am having trouble setting the inheritance. I want to activate the generator function when the pushButton_3 is clicked but I keep getting the error in the title. My full code:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow
import pyqrcode
import png
from pyqrcode import QRCode


class MainWindow(QMainWindow):

    def setupUi(self):
        self.setObjectName("QR Generator")
        self.setFixedSize(591, 381)

        self.pushButton = QtWidgets.QPushButton(self)
        self.pushButton.setGeometry(QtCore.QRect(340, 320, 241, 51))
        font = QtGui.QFont()
        font.setFamily("Bahnschrift SemiBold")
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")

        self.pushButton_2 = QtWidgets.QPushButton(self)
        self.pushButton_2.setGeometry(QtCore.QRect(340, 260, 241, 51))
        font = QtGui.QFont()
        font.setFamily("Bahnschrift SemiBold")
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_2.setFont(font)
        self.pushButton_2.setObjectName("pushButton_2")

        self.pushButton_3 = QtWidgets.QPushButton(self)
        self.pushButton_3.setGeometry(QtCore.QRect(10, 200, 321, 51))
        font = QtGui.QFont()
        font.setFamily("Bahnschrift SemiBold")
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_3.setFont(font)
        self.pushButton_3.setObjectName("pushButton_3")
        self.pushButton_3.clicked.connect(self.generate()) 

        self.pushButton_4 = QtWidgets.QPushButton(self)
        self.pushButton_4.setGeometry(QtCore.QRect(10, 260, 321, 51))
        font = QtGui.QFont()
        font.setFamily("Bahnschrift SemiBold")
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_4.setFont(font)
        self.pushButton_4.setObjectName("pushButton_4")

        self.graphicsView = QtWidgets.QGraphicsView(self)
        self.graphicsView.setGeometry(QtCore.QRect(340, 10, 241, 241))
        self.graphicsView.setObjectName("graphicsView")

        self.textEdit = QtWidgets.QTextEdit(self)
        self.textEdit.setGeometry(QtCore.QRect(10, 150, 321, 41))
        font = QtGui.QFont()
        font.setFamily("Bahnschrift SemiBold")
        font.setBold(True)
        font.setWeight(75)
        self.textEdit.setFont(font)
        self.textEdit.setObjectName("textEdit")

        self.label = QtWidgets.QLabel(self)
        self.label.setGeometry(QtCore.QRect(40, 20, 261, 61))
        font = QtGui.QFont()
        font.setFamily("Bahnschrift SemiBold")
        font.setPointSize(18)
        font.setBold(True)
        font.setWeight(75)
        self.label.setFont(font)
        self.label.setObjectName("label")

        self.textEdit_2 = QtWidgets.QTextEdit(self)
        self.textEdit_2.setGeometry(QtCore.QRect(10, 100, 321, 41))
        font = QtGui.QFont()
        font.setFamily("Bahnschrift SemiBold")
        font.setBold(True)
        font.setWeight(75)
        self.textEdit_2.setFont(font)
        self.textEdit_2.setObjectName("textEdit_2")

        self.retranslateUi(self)
        QtCore.QMetaObject.connectSlotsByName(self)
    
    def retranslateUi(self):
        _translate = QtCore.QCoreApplication.translate
        self.setWindowTitle(_translate("Dialog", "QR Code Generator"))
        self.pushButton.setText(_translate("Dialog", "Exit"))
        self.pushButton_2.setText(_translate("Dialog", "Save As Picture"))
        self.pushButton_3.setText(_translate("Dialog", "Generate QR Code"))
        self.pushButton_4.setText(_translate("Dialog", "Clear"))
        self.textEdit.setPlaceholderText(_translate("Dialog", "Paste link here"))
        self.label.setText(_translate("Dialog", "QR Code Generator"))
        self.textEdit_2.setPlaceholderText(_translate("Dialog", "Give a name to the QR"))

    def save1(self):
        pass
    
    def generate(self):
        link = self.textEdit_2.text()
        qrname = self.textEdit.text()
        qrcode = pyqrcode.create(link)
        qrcode.png(f"{qrname}.png", scale = 6)


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    self = QtWidgets.QDialog()
    ui = MainWindow()
    ui.setupUi()
    self.show()
    sys.exit(app.exec_())

1 Answer 1

1

self.pushButton_3.clicked.connect(self.generate()) at this line you are not connecting the generate function but you are calling it by adding () to function name, so change it to self.pushButton_3.clicked.connect(self.generate) and self.generate should accept one argument x which is callback event of pushbutton

so either change definition of self.generate which accepts one argument or make a lambda function which accepts one argument and calls self.generate by placing this line self.pushButton_3.clicked.connect(lambda x: self.generate())

Sign up to request clarification or add additional context in comments.

1 Comment

The argument of the signal is not the "callback event", but the checked state. Also, it's not required to add a relative argument for the function, as Qt is perfectly capable of calling it by ignoring the argument if the signature is shorter.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.