Поэтому я сделал простое приложение PyQt5 с QVBoxLayout. Очевидно, что каждая кнопка, которую я добавляю, простирается от одного конца до другого, и все они накладываются друг на друга. Как я могу добавить кнопки в QVBoxLayout, которые будут группой из трех маленьких кнопок на моем экране?
PyQt5: QVBoxLayout: как сделать три кнопки группой?
comment
У вас есть пример? Набросок того, чего вы хотите достичь?
- person fferri   schedule 02.05.2018
comment
Да! Я нашел это в Интернете (не могу опубликовать свой пример кода, потому что я изменил его, пытаясь добиться того, чего хочу) [ссылка]bogotobogo.com/Qt/images/LayoutsWithoutDesigner/ вверху — это то, чего я хочу добиться, а три кнопки внизу — это то, чего я достиг
- person A.Bg   schedule 02.05.2018
Ответы (2)
Итак, вам нужен QHBoxLayout
для ваших кнопок, вложенный в QVBoxLayout
:
class Main(QMainWindow):
def __init__(self, parent=None):
super(Main, self).__init__(parent)
self.centralWidget = QWidget()
self.setCentralWidget(self.centralWidget)
self.vLayout = QVBoxLayout(self.centralWidget)
self.buttonsWidget = QWidget()
self.buttonsWidgetLayout = QHBoxLayout(self.buttonsWidget)
self.buttons = [QPushButton(c) for c in 'ABC']
for button in self.buttons:
self.buttonsWidgetLayout.addWidget(button)
self.placeHolder = QWidget()
self.placeHolder.setMinimumWidth(480)
self.placeHolder.setMinimumHeight(320)
self.placeHolder.setStyleSheet('* {background: red;}')
self.vLayout.addWidget(self.placeHolder)
self.vLayout.addWidget(self.buttonsWidget)
person
fferri
schedule
02.05.2018
ну, у меня там интерактивный экран, поэтому кнопки должны располагаться под ним (то есть QVBoxLayout), иначе они будут располагаться сбоку от этого экрана
- person A.Bg; 02.05.2018
У меня там есть vtk renderwindowinteractor, и мне нужно три кнопки, чтобы зайти под него. До сих пор я мог получить только три длинные кнопки прямо под ним с раскладкой H или маленькие сбоку с раскладкой V. Но я хочу, чтобы под ним было три маленьких
- person A.Bg; 02.05.2018
Потрясающие! Большое спасибо, добавил в мой код, и это сработало
- person A.Bg; 02.05.2018
Чтобы элементы не растягивались, можно использовать специальный элемент QSpacerItem.
Попытайся:
from PyQt5 import Qt
class Widget(Qt.QWidget):
def __init__(self):
super().__init__()
layout = Qt.QVBoxLayout(self)
btn_layout = Qt.QHBoxLayout()
# !!!
btn_layout.addItem(Qt.QSpacerItem(0, 0, Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Minimum))
btn1 = Qt.QPushButton("Button 1")
btn2 = Qt.QPushButton("Button 2")
btn3 = Qt.QPushButton("Button 3")
btn_layout.addWidget(btn1)
btn_layout.addWidget(btn2)
btn_layout.addWidget(btn3)
table = Qt.QTableWidget()
table.setRowCount(5)
table.setColumnCount(5)
layout.addWidget(table)
layout.addLayout(btn_layout)
if __name__ == '__main__':
app = Qt.QApplication([])
w = Widget()
w.show()
app.exec()
person
S. Nick
schedule
02.05.2018