Писать методы в классе кнопки или классе окна 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. Как решить ошибку и как лучше писать?