[Python] Alignment in PyQt5

Discussão em 'Python' iniciado por Stack, Agosto 23, 2025.

  1. Stack

    Stack Membro Participativo

    I've been trying to learn PyQt5 and decided to do some small project. I'm trying to make a guessing game, where you type in a value and the program says if it's correct. My problem is that I centered my label in a layout part, so it appears at the center bottom of its container, but I want it to be at the center of the page when the button is clicked. I believe that after the button is clicked, the label appears at the bottom of the page due to main_layout.addWidget(self.label, alignment=Qt.AlignmentFlag.AlignBottom| Qt.AlignmentFlag.AlignJustify). Here's the code:

    import sys
    import time

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

    class MainWindow(QMainWindow):
    def __init__(self):
    super().__init__()

    #fonts
    QFontDatabase.addApplicationFont("fonts\Evangelie.ttf")
    QFontDatabase.addApplicationFont("fonts\Bebas_Neue_Cyrillic.ttf")
    QFontDatabase.addApplicationFont("fonts\MontserratAlternates-Medium.ttf")
    QFontDatabase.addApplicationFont("fonts\MontserratAlternates-Bold.ttf")
    QFontDatabase.addApplicationFont("fonts\MontserratAlternates-SemiBold.ttf")

    #labels
    self.label = QLabel("Скільки чулувіків має крапка?", self)
    self.line_edit = QLineEdit(self)
    self.button = QPushButton("Відповісти.", self)

    self.initUI()

    def initUI(self):
    central_widget = QWidget()
    self.setCentralWidget(central_widget)

    #region main window
    self.setWindowTitle("Guess.")
    self.resize(800,700)
    self.setStyleSheet("background-color: #697565;")
    #endregion

    #region label
    self.label.setFont(QFont("Montserrat Alternates SemiBold", 24))
    self.label.adjustSize()
    self.label.setStyleSheet("margin: 0, 20, 0, 0;" \
    #"background-color:red;"
    "color: #ECDFCC;"
    "font-style: bold;"
    )
    #endregion

    #region line_edit
    self.line_edit.setFixedSize(200, 80)
    self.line_edit.setAlignment(Qt.AlignmentFlag.AlignCenter)
    self.line_edit.setFont(QFont("Montserrat Alternates SemiBold", 20))
    self.line_edit.setStyleSheet("background-color: #181C14;" \
    "color: #697565;" \
    "border-radius: 15px;" \
    "margin: 0,20,0,0;")
    #endregion

    #region button
    self.button.setStyleSheet("border-radius:15px;" \
    "background-color: #ECDFCC;" \
    "color: #181C14;")
    self.button.setFixedSize(150,50)
    self.button.setFont(QFont("Montserrat Alternates Medium", 10))
    self.button.clicked.connect(self.on_click)
    #endregion

    #region layout
    main_layout = QVBoxLayout()

    main_layout.addWidget(self.label, alignment=Qt.AlignmentFlag.AlignBottom| Qt.AlignmentFlag.AlignJustify)
    main_layout.addWidget(self.line_edit, alignment=Qt.AlignmentFlag.AlignHCenter|Qt.AlignmentFlag.AlignJustify)
    main_layout.addWidget(self.button, alignment=Qt.AlignmentFlag.AlignJustify | Qt.AlignmentFlag.AlignTop)

    central_widget.setLayout(main_layout)
    #endregion

    #region button clicked
    def on_click(self):
    self._answer = self.line_edit.text()
    print(self._answer)

    if(self._answer == '0'):
    self.label.setText("You won!")

    self.line_edit.hide()
    self.button.hide()

    self.label.setAlignment(Qt.AlignmentFlag.AlignCenter)
    #endregion



    def center(self):
    frame_geometry = self.frameGeometry()
    screen_center = QDesktopWidget().availableGeometry().center()
    frame_geometry.moveCenter(screen_center)
    self.move(frame_geometry.topLeft())

    def main():
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())


    if __name__ == "__main__":
    main()


    I've tried using setAlignment method for a label, but it didn't help.

    Any help would be greatly appreciated.

    [​IMG]

    Continue reading...

Compartilhe esta Página