2

I have an application with multiple buttons When pressed a button, the text on the pressed button has to be changed. This can be done with a separate function for each button, but I want to use 1 function to keep the code short.

Code so far:


from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys


class MyWindow(QMainWindow):
    def __init__(self):
        super(MyWindow, self).__init__()
        self.setGeometry(200, 200, 700, 500)
        self.setWindowTitle("Tic Tac Toe")
        self.initUI()

    def initUI(self):
        font = QtGui.QFont()
        font.setPointSize(50)
        font.setBold(True)
        font.setWeight(75)
        self.btn1 = QtWidgets.QPushButton(self)
        self.btn1.setGeometry(QtCore.QRect(90, 50, 93, 91))
        self.btn1.setFont(font)
        self.btn1.setObjectName("btn1")
        self.btn1.clicked.connect(lambda:self.function("btn1"))
        self.btn2 = QtWidgets.QPushButton(self)
        self.btn2.setGeometry(QtCore.QRect(210, 50, 93, 91))
        self.btn2.setFont(font)
        self.btn2.setText("")
        self.btn2.setObjectName("btn2")
        self.btn2.clicked.connect(lambda:self.function("btn2"))

        font2 = QtGui.QFont()
        font2.setPointSize(16)
        self.label = QtWidgets.QLabel(self)
        self.label.setGeometry(QtCore.QRect(470, 50, 201, 51))
        self.label.setFont(font2)
        self.label.setObjectName("label")

    def function(self, btnnmbr):
        self.label.setText("knop " + btnnmbr)
        #self.btn1.setText("X")    
        

     


# Mainloop
def window():
    app = QApplication(sys.argv)
    win = MyWindow()
    win.show()
    sys.exit(app.exec_())

window()

Any idea how to change the text of the clicked instance of a button?

1 Answer 1

1

Try it:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow


class MyWindow(QMainWindow):
    def __init__(self):
        super(MyWindow, self).__init__()
        self.setGeometry(200, 200, 700, 500)
        self.setWindowTitle("Tic Tac Toe")
        self.initUI()

    def initUI(self):
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        
        self.btn1 = QtWidgets.QPushButton(self)
        self.btn1.setGeometry(QtCore.QRect(90, 50, 93, 91))
        self.btn1.setFont(font)
        self.btn1.setObjectName("btn1")
        self.btn1.clicked.connect(lambda ch, btn=self.btn1: self.function(btn))  # +
        
        self.btn2 = QtWidgets.QPushButton(self)
        self.btn2.setGeometry(QtCore.QRect(210, 50, 93, 91))
        self.btn2.setFont(font)
        self.btn2.setText("")
        self.btn2.setObjectName("btn2")
        self.btn2.clicked.connect(lambda ch, btn=self.btn2: self.function(btn))  # +

        font2 = QtGui.QFont()
        font2.setPointSize(16)
        self.label = QtWidgets.QLabel(self)
        self.label.setGeometry(QtCore.QRect(470, 50, 201, 51))
        self.label.setFont(font2)
        self.label.setObjectName("label")

    def function(self, btn):                                                     # + btn
        self.label.setText(f"knop {btn.objectName()}")                           # +
        btn.setText(btn.objectName())                                            # +++
        #self.btn1.setText("X")    
        

if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = MyWindow()
    win.show()
    sys.exit(app.exec_())

enter image description here

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

Comments

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.