Qt 6.11 is out! See what's new in the release
blog
Adding buttons to layout
-
Hi, I'm wondering why this code doesn't work. I expect all buttons to be placed in a row like this:
But I see only white window:
. My code:def init_ui(self): self.setWindowTitle("Алфавитный указатель") self.setGeometry(100, 100, 1000, 700) self.buttons_layout = QHBoxLayout() self.buttons = [QPushButton(chr(index)) for index in range(ord('А'), ord('Я') + 1)] for button in self.buttons: # button.clicked.connect(lambda: self.filter_data(button.text())) self.buttons_layout.addWidget(button) self.setLayout(self.buttons_layout)My full code:
import csv import random import sys from PyQt5.QtWidgets import QApplication from PyQt5.QtWidgets import QMainWindow, QTableWidget, QTableWidgetItem,\ QLabel, QPushButton, QHBoxLayout from PyQt5.QtCore import QRect class MyWidget(QMainWindow): def __init__(self): super().__init__() self.init_ui() # self.loadTable() def init_ui(self): self.setWindowTitle("Алфавитный указатель") self.setGeometry(100, 100, 1000, 700) self.buttons_layout = QHBoxLayout() self.buttons = [QPushButton(chr(index)) for index in range(ord('А'), ord('Я') + 1)] for button in self.buttons: # button.clicked.connect(lambda: self.filter_data(button.text())) self.buttons_layout.addWidget(button) self.setLayout(self.buttons_layout) # self.result_label = QLabel(self) # self.result_label.setGeometry(10, 660, 200, 30) # self.table_widget = QTableWidget(self) # self.table_widget.setGeometry(10, 50, 980, 600) # def loadTable(self, data): # self.table_widget.setColumnCount(5) # self.table_widget.setHorizontalHeaderLabels(["ID", "Название", "Год", "Жанр", # "Продолжительность"]) # self.table_widget.setRowCount(0) # for i, row in enumerate(data): # self.table_widget.setRowCount(self.table_widget.rowCount() + 1) # for j, elem in enumerate(row): # self.table_widget.setItem(i, j, QTableWidgetItem(elem)) # self.table_widget.resizeColumnsToContents() # # def filter_data(self, letter): # pass if __name__ == '__main__': app = QApplication(sys.argv) ex = MyWidget() ex.show() sys.exit(app.exec()) -
Hi, I'm wondering why this code doesn't work. I expect all buttons to be placed in a row like this:
But I see only white window:
. My code:def init_ui(self): self.setWindowTitle("Алфавитный указатель") self.setGeometry(100, 100, 1000, 700) self.buttons_layout = QHBoxLayout() self.buttons = [QPushButton(chr(index)) for index in range(ord('А'), ord('Я') + 1)] for button in self.buttons: # button.clicked.connect(lambda: self.filter_data(button.text())) self.buttons_layout.addWidget(button) self.setLayout(self.buttons_layout)My full code:
import csv import random import sys from PyQt5.QtWidgets import QApplication from PyQt5.QtWidgets import QMainWindow, QTableWidget, QTableWidgetItem,\ QLabel, QPushButton, QHBoxLayout from PyQt5.QtCore import QRect class MyWidget(QMainWindow): def __init__(self): super().__init__() self.init_ui() # self.loadTable() def init_ui(self): self.setWindowTitle("Алфавитный указатель") self.setGeometry(100, 100, 1000, 700) self.buttons_layout = QHBoxLayout() self.buttons = [QPushButton(chr(index)) for index in range(ord('А'), ord('Я') + 1)] for button in self.buttons: # button.clicked.connect(lambda: self.filter_data(button.text())) self.buttons_layout.addWidget(button) self.setLayout(self.buttons_layout) # self.result_label = QLabel(self) # self.result_label.setGeometry(10, 660, 200, 30) # self.table_widget = QTableWidget(self) # self.table_widget.setGeometry(10, 50, 980, 600) # def loadTable(self, data): # self.table_widget.setColumnCount(5) # self.table_widget.setHorizontalHeaderLabels(["ID", "Название", "Год", "Жанр", # "Продолжительность"]) # self.table_widget.setRowCount(0) # for i, row in enumerate(data): # self.table_widget.setRowCount(self.table_widget.rowCount() + 1) # for j, elem in enumerate(row): # self.table_widget.setItem(i, j, QTableWidgetItem(elem)) # self.table_widget.resizeColumnsToContents() # # def filter_data(self, letter): # pass if __name__ == '__main__': app = QApplication(sys.argv) ex = MyWidget() ex.show() sys.exit(app.exec())@afobeus
QMainWindows have their own layout (see docs), you should not be doingself.setLayout(...). If you are intending to use aQMainWindowyou might want to look atQMainWindow.setCentralWidget(), but I'm actually wondering if you just intend to use/derive from a plainQWidget?