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
QMainWindow
s have their own layout (see docs), you should not be doingself.setLayout(...)
. If you are intending to use aQMainWindow
you might want to look atQMainWindow.setCentralWidget()
, but I'm actually wondering if you just intend to use/derive from a plainQWidget
?