Виджеты grid в PyQt5 располагаются в одном месте
Возникает проблема, что виджеты располагаются в одном месте, начале координат grid, как я понял. Как можно это решить?
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtWidgets import QRadioButton, QPushButton, QLabel, QGridLayout
class MainForm(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 400, 300)
self.setWindowTitle('Крестики нолики')
self.pos = [(0, 0), (0, 1), (0, 2),
(1, 0), (1, 1), (2, 2),
(2, 0), (2, 1), (2, 2)]
self.grid = QGridLayout(self)
for i in range(9):
self.button = QPushButton(self)
self.grid.addWidget(self.button, self.pos[i][0], self.pos[i][1])
self.setLayout(self.grid)
if __name__ == '__main__':
app = QApplication(sys.argv)
main_form = MainForm()
main_form.show()
sys.exit(app.exec())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Класс QMainWindow предоставляет главное окно приложения.
Больше... https://doc.qt.io/qt-5/qmainwindow.html#details
Примечание. Создание главного окна без центрального виджета не поддерживается. У вас должен быть центральный виджет, даже если это просто заполнитель.
Попробуйте так:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget
from PyQt5.QtWidgets import QRadioButton, QPushButton, QLabel, QGridLayout
class MainForm(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 300, 300)
self.setWindowTitle('Крестики нолики')
self.centralWidget = QWidget() # +++
self.setCentralWidget(self.centralWidget) # +++
self.grid = QGridLayout(self.centralWidget) # + self.centralWidget
for i in range(3):
for j in range(3): # + j
text = f"{i},{j}"
button = QPushButton(text)
button.setFixedSize(70, 70)
button.clicked.connect(lambda ch, text=text : print(text))
self.grid.addWidget(button, i, j)
if __name__ == '__main__':
app = QApplication(sys.argv)
main_form = MainForm()
main_form.show()
sys.exit(app.exec_())
