Невозможно выровнять верхний QTableWidget в QVBoxLayout - PullRequest
0 голосов
/ 26 июня 2019

Я хочу выровнять как QLabel, так и QTableWidget в QVBoxLayout сверху.

У меня нет проблем с выравниванием QLabel поверх QVBoxLayout с помощью метода setAlignment. Когда я добавляю QTableWidget в QVBoxLayout, возникает проблема.

Мой код:

class AWidget(QWidget):

    def __init__(self):
        super().__init__()

        self.aLabel = QLabel('Table')

        self.aTable = QTableWidget(6, 6)
        self.aTable.setMaximumHeight(200)

        self.aLayout = QVBoxLayout()
        self.aLayout.addWidget(self.aLabel)
        self.aLayout.addWidget(self.aTable)
        self.aLayout.setAlignment(Qt.AlignTop)
        self.setLayout(self.aLayout)

app = QApplication([])

aWidget = AWidget()
aWidget.resize(640, 480)
aWidget.show()

sys.exit(app.exec_())

QLabel должен быть в верхней части основного виджета, за которым следует QTableWidget под ним. Однако и QLabel, и QTableWidget продолжают оставаться в центре основного виджета, оставляя много пробелов между ними.

1 Ответ

0 голосов
/ 26 июня 2019

Вы установили максимальную высоту вашего стола на 200 пикселей, и раскладка справляется с этим, занимая как можно больше места.

Если вы хотите сохранить эту высоту, вы можете вставить stretch в конце макета:

class AWidget(QWidget):

    def __init__(self):
        super().__init__()

        self.aLabel = QLabel('Table')

        self.aTable = QTableWidget(6, 6)
        self.aTable.setMaximumHeight(200)

        self.aLayout = QVBoxLayout()
        self.aLayout.setAlignment(Qt.AlignTop)
        self.aLayout.addWidget(self.aLabel)
        self.aLayout.addWidget(self.aTable)
        self.aLayout.addStretch() # Adding a stretch to occupy the empty space
        self.setLayout(self.aLayout)
...