Писать методы в классе кнопки или классе окна PyQt6?

Я пишу программу, где мне нужно циклом создавать кнопки которые будут нажиматься, запускать таймер, и переставать быть кликабельными. Где лучше реализовать таймер, в классе кнопки или непосредственно в файле с приложением?

Код приложения:

from PyQt6 import QtCore, QtWidgets
from classes import TableButton
from time import sleep
import sys

class Ui_MainWindow(object):
    def __init__(self):
        super(object).__init__()

        self.players: list[str] = ["Э","НЗ", "НС", "П", "М", "В"]
        self.table: list[str] = []
        self.l = len(self.players)

    def setupUI(self, MainWindow):

        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(self.l*75, (self.l+1)*75)
        MainWindow.setStyleSheet("background-color: rgb(89, 89, 89);")
        MainWindow.setIconSize(QtCore.QSize(32, 32))
        self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.centralwidget.setGeometry(QtCore.QRect(0,0,self.l*75, (self.l+1)*75))

        self.create_table()
        self.display_table()

    def display_table(self):
        for i in range(len(self.table)):
            self.button = TableButton(i//self.l, i%self.l,self.centralwidget, self.table[i])
            self.button.clicked.connect(lambda: self.run_timer(self.time))

    def create_table(self):
        adder:int = 1
        for i in range(1,len(self.players)):
            for j in range(len(self.players)):
                self.table.append(f"{self.players[j]:2} -> {self.players[(j+adder)%len(self.players)]:2}")
            adder+=1

    def run_timer(self, time):
        sleep(time)
        print("URA!")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUI(MainWindow)
    MainWindow.show()
    sys.exit(app.exec())``



Код класса:
```from PyQt6 import QtWidgets, QtCore

class TableButton(QtWidgets.QPushButton):
    def __init__(self, i, j, layout, text):
        super().__init__(self)

        self.Button = QtWidgets.QPushButton(parent=layout)
        self.Button.setGeometry(QtCore.QRect(75*j, 75*i, 75, 75))
        self.Button.setText(text)
        self.Button.clicked.connect(lambda: self.set_disable())
    
    def set_disable(self):
        self.Button.setDisabled(True)`


При такой архитектуре выдает ошибку: RuntimeError: super-class __init__() of type TableButton was never called. Как решить ошибку и как лучше писать?

Ответы (0 шт):