Не получается сделать передачу данных в сигнале.
Сделал через несколько разных методов. Подскажите как переделать в один метод, что бы в нём передавалось значение через параметр.
Сделано: set_table_size_3, set_table_size_4, set_table_size_5
Хочется: set_table_size(count)
#!/usr/bin/python3 # -*- coding: utf-8 -*- import sys import random from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QGridLayout, QPushButton, QAction from PyQt5.QtCore import QSize, pyqtSignal, QBasicTimer class MainWindow(QMainWindow): def __init__(self): super().__init__() self.init_ui() def init_ui(self): self.m_gridTable_Schulte = OstGridTable(self) # создание экземпляра класса OstGridTable self.setCentralWidget(self.m_gridTable_Schulte) # назначение таблицы (OstGridTable) центральным виджетом main_menu = self.menuBar() # создание экземпляра меню (строка меню) size_menu = main_menu.addMenu('Задать размер таблицы') size_button = QAction('3x3', self) size_button.setStatusTip('Создать поле размером 3x3') size_button.triggered.connect(self.m_gridTable_Schulte.set_table_size_3) size_menu.addAction(size_button) size_button = QAction('4x4', self) size_button.setStatusTip('Создать поле размером 4x4') size_button.triggered.connect(self.m_gridTable_Schulte.set_table_size_4) size_menu.addAction(size_button) size_button = QAction('5x5', self) size_button.setStatusTip('Создать поле размером 5x5') size_button.triggered.connect(self.m_gridTable_Schulte.set_table_size_5) size_menu.addAction(size_button) self.show() # отображаем окно на экране class OstGridTable(QWidget): m_grid_table_schulte = QGridLayout() # создаём экземпляр класса QGridLayout def __init__(self, parent): super().__init__(parent) self.table_size = 5 # размерность таблицы self.regenOstGridTable() # обновляем таблицу def regenOstGridTable(self): # метод очищает таблицу self.delete_buttons() # запуск метода delete_buttons() names = [names + 1 for names in range(0, self.table_size * self.table_size)] random.shuffle(names) # перемешивание последовательности i = 0 for j in range(0, self.table_size): for k in range(0, self.table_size): button = QPushButton(str(names[i]), self) # создаём экземпляр класса QPushButton button.setMinimumSize(QSize(90, 90)) # задаём размер кнопки # привязываем сигнал к методу on_button_clicked (используем сигнал clicked) # button.clicked.connect(self.on_button_clicked) self.m_grid_table_schulte.addWidget(button, j, k) # добавляем кнопки на раскладку i += 1 self.setLayout(self.m_grid_table_schulte) # создаём раскладку таблицей (QGridLayout) def delete_buttons(self): # удаление кнопок с таблицы if self.m_grid_table_schulte is not None: while self.m_grid_table_schulte.count(): item = self.m_grid_table_schulte.takeAt(0) widget = item.widget() if widget is not None: widget.deleteLater() def set_table_size_3(self): self.table_size = 3 # размерность таблицы self.regenOstGridTable() # обновляем таблицу def set_table_size_4(self): self.table_size = 4 # размерность таблицы self.regenOstGridTable() # обновляем таблицу def set_table_size_5(self): self.table_size = 5 # размерность таблицы self.regenOstGridTable() # обновляем таблицу if __name__ == "__main__": app = QApplication(sys.argv) main_window = MainWindow() sys.exit(app.exec_())
Если делаю так:
size_button.triggered.connect(self.m_gridTable_Schulte.set_table_size(3)) ... def set_table_size(self, count): self.table_size = count # размерность таблицы self.regenOstGridTable() # обновляем таблицу
size_button.triggered.connect(self.m_gridTable_Schulte.set_table_size(3))
TypeError: argument 1 has unexpected type ‘NoneType’