#python #pyqt #pyqt5
#python #pyqt #pyqt5
Вопрос:
У меня есть два виджета в классе QFrame. Первый виджет — это QTabWidget, а следующий — кнопка. Я пытался установить верхнее поле для кнопки. Я попытался обновить его, установив margin-top в отрицательное значение для Qpushbutton, это не сработало. Я пытался выровнять кнопку сверху, на той же высоте панели вкладок
class TableTreeItemChild(QFrame):
"""Component for showing child widget of tree item"""
def __init__(self, dbData, urlDBIndex):
super(TableTreeItemChild, self).__init__()
self.urlDBIndex = urlDBIndex
self.tableTreeTab = TableTreeTab(dbData)
self.setupUI()
def setupUI(self):
"""Setting up the component"""
mainLayout = QHBoxLayout()
mainLayout.setContentsMargins(0, 0, 0, 0)
mainLayout.addWidget(self.tableTreeTab)
exportButton = QPushButton("")
exportButton.setIcon(QIcon("assets/icons/export_icon_16.png"))
exportButton.setStyleSheet("QPushButton{border: 1px solid #e1e1e1; padding:5px; border-radius:4px; } ")
exportButton.setGeometry(0, -100, 10, 10)
exportButton.clicked.connect(self.onExportButtonClick)
mainLayout.addWidget(exportButton)
self.setFixedWidth(800)
self.setLayout(mainLayout)
Текущий вывод приведенного выше кода:
Комментарии:
1. Ваш вопрос неясен. Что вы подразумеваете под «верхним краем»? Вы случайно не пытаетесь выровнять кнопку сверху, на той же высоте панели вкладок?
2. ДА.. это то, что я имел в виду
Ответ №1:
Чтобы выровнять виджет сверху в макете, alignment
необходимо указать аргумент.
Помните, что addWidget()
у этого есть три аргумента (обязательный виджет, растяжение и выравнивание), поэтому, если вы не укажете растяжение, выравнивание должно быть ключевым:
mainLayout.addWidget(exportButton, alignment=QtCore.Qt.AlignTop)
Три соображения:
- установка геометрии для виджета, добавляемого в макет, бесполезна, так как макет автоматически изменит геометрию виджета в зависимости от ситуации;
- таблицы стилей в Qt не такие продвинутые, как «веб» CSS: они применяются только к свойствам виджетов, и они не предназначены (и не должны) для обеспечения контроля над позиционированием, изменением размера или выравниванием;
- хотя выравнивание приведет к размещению вашего виджета сверху, невозможно гарантировать, что он будет точно выровнен с другими виджетами, и это связано с тем, как Qt рисует элементы: могут быть некоторые обходные пути, но они не на 100% безопасны во всех ситуациях; как объяснялось выше, Qtтаблицы стилей переопределяют только внешний вид отдельных виджетов, в них нет разметки, как в обычном CSS, поскольку за это отвечают менеджеры компоновки (подклассы QLayout), и они не поддерживают таблицы стилей;