как сделать так, чтобы макет показывался внизу - PullRequest
0 голосов
/ 19 сентября 2019

Окно будет иметь два макета: A - основной макет для отображения некоторых изображений;B, Qlabel, чтобы показать некоторый статус.Когда окно запускается, А будет пустым.А показал бы некоторые изображения после некоторых операций.

У меня вопрос: как показать B внизу?Текущий код:

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys


class TimeLine(QMainWindow):

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

        widget = QWidget()
        self.setCentralWidget(widget)

        layout = QVBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        widget.setLayout(layout)

        statusLabel = QLabel('status bar')
        statusLabel.setStyleSheet("background-color:blue")
        statusLabel.setMaximumHeight(20)

        layout.addWidget(statusLabel)
        layout.setSpacing(0)

app = QApplication(sys.argv)
window = TimeLine()
window.show()
app.exec_()

И результат:

enter image description here

Синяя метка показывает в середине, и яхочу, чтобы это было показано внизу.

Затем я добавляю отрезок.Компоновка B будет показана внизу, однако компоновка A также будет сжата.Код:

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys


class TimeLine(QMainWindow):

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

        widget = QWidget()
        self.setCentralWidget(widget)

        layout = QVBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        widget.setLayout(layout)

        mainLabel = QLabel()
        mainLabel.setStyleSheet("background-color:yellow")

        statusLabel = QLabel()
        statusLabel.setStyleSheet("background-color:blue")
        statusLabel.setMaximumHeight(20)

        layout.addWidget(mainLabel)
        layout.addStretch()
        layout.addWidget(statusLabel)
        layout.setSpacing(0)

app = QApplication(sys.argv)
window = TimeLine()
window.show()
app.exec_()

И результат:

enter image description here

Желтая метка - это основная метка, серый цветпредставляет собой задний план.Я хочу, чтобы желтая метка занимала все окно, кроме синей метки.

Итак, что я хочу: когда нет другой метки, я надеюсь, что синяя метка показывается внизу, например: enter image description here

там, где естьдругая метка (желтая метка), я надеюсь, желтая метка занимает все пространство, кроме синей метки, например: enter image description here

Ответы [ 2 ]

2 голосов
/ 19 сентября 2019

Я видел вашу задачу так:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *


class TimeLine(QMainWindow):
    def __init__(self):
        super(TimeLine, self).__init__()
        widget = QWidget()
        self.setCentralWidget(widget)

        mainLabel = QLabel("This is a label.", alignment = Qt.AlignCenter)
        mainLabel.setStyleSheet("background-color:yellow")

        layout = QVBoxLayout(widget)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addWidget(mainLabel)

        self.statusBar().setStyleSheet("background-color:blue; color: #fff")
        self.statusBar().showMessage('Hello {} !'.format('status bar'))

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = TimeLine()
    window.show()
    sys.exit(app.exec_())

enter image description here

1 голос
/ 19 сентября 2019

Если я правильно понимаю ваш вопрос, вы хотите, чтобы синяя метка всегда была выровнена с нижним краем главного окна.Один из способов получить то, что вы хотите, установить выравнивание метки на Qt.AlignBottom при добавлении его в макет.Вам также необходимо отрегулировать коэффициенты растяжения двух меток, чтобы убедиться, что желтая метка занимает все пространство над синей меткой, когда она присутствует, т.е.

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sys


class TimeLine(QMainWindow):

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

        widget = QWidget()
        self.setCentralWidget(widget)

        layout = QVBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        widget.setLayout(layout)

        mainLabel = QLabel()
        mainLabel.setStyleSheet("background-color:yellow")

        statusLabel = QLabel('status bar')
        statusLabel.setStyleSheet("background-color:blue")
        statusLabel.setMaximumHeight(20)

        layout.addWidget(mainLabel, stretch = 1)
        layout.addWidget(statusLabel, stretch = 0, alignment = Qt.AlignBottom)
        layout.setSpacing(0)

app = QApplication(sys.argv)
window = TimeLine()
window.show()
app.exec_()

Обе метки:

Both labels

Только синяя метка:

Blue label only

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...