Python 在窗口的顶部中心显示QLabel

Python 在窗口的顶部中心显示QLabel,python,layout,pyqt,pyqt5,qlabel,Python,Layout,Pyqt,Pyqt5,Qlabel,我自己设置PyQt有困难。我的想法是创造一个有歌曲标题和专辑封面的音乐播放器。我成功地创建了自己的窗口并添加了专辑封面。但我无法将标签添加到正确的位置。我希望歌曲标题位于窗口的顶部中心,如下图所示: 我试过很多方法,但没有成功 import sys from PyQt5.QtGui import QIcon, QPixmap, QFontDatabase, QFont from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow,

我自己设置PyQt有困难。我的想法是创造一个有歌曲标题和专辑封面的音乐播放器。我成功地创建了自己的窗口并添加了专辑封面。但我无法将标签添加到正确的位置。我希望歌曲标题位于窗口的顶部中心,如下图所示:

我试过很多方法,但没有成功

import sys
from PyQt5.QtGui import QIcon, QPixmap, QFontDatabase, QFont
from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow, QWidget, QGridLayout, QDialog
from PyQt5.QtCore import Qt, QRect

# Subclass QMainWindow to customise your application's main window
class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.title = 'PyQt5 simple window - pythonspot.com'
        self.left = 10
        self.top = 10
        self.width = 480
        self.height = 320
        self.initUI()

        self.setWindowTitle("My Awesome App")

    def add_font(self):
        # Load the font:
        font_db = QFontDatabase()
        font_id = font_db.addApplicationFont('American Captain.ttf')
        families = font_db.applicationFontFamilies(font_id)
        ttf_font = QFont(' '.join(families), 15)
        return ttf_font

    def initUI(self):
        ttf_font = self.add_font()
        w = QWidget()
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        self.show()
        album_cover = QLabel(self)
        album_pic = QPixmap('resized_image.jpg')
        album_cover.setPixmap(album_pic)

        album_cover.setAlignment(Qt.AlignCenter)
        self.setCentralWidget(album_cover)


        art_alb = QLabel(self)
        art_alb.setFont(ttf_font)
        art_alb.setText("michael buble - christmas")
        art_alb.setGeometry(self.x, self.y, self.x, self.y)
        art_alb.setAlignment(Qt.AlignTop | Qt.AlignCenter )
        art_alb.show()
        self.show()



app = QApplication(sys.argv)

window = MainWindow()
window.show()

app.exec_()






您应该使用具有布局的中心小部件来控制子小部件在主窗口中的大小和位置。下面是您的
initUI
方法的重写,该方法可以实现您想要的功能:

class MainWindow(QMainWindow):
    ...

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        widget = QWidget()
        layout = QGridLayout(widget)

        art_alb = QLabel(self)
        ttf_font = self.add_font()
        art_alb.setFont(ttf_font)
        art_alb.setText("michael buble - christmas")

        layout.addWidget(art_alb, 0, 0, Qt.AlignTop | Qt.AlignHCenter)

        album_cover = QLabel(self)
        album_pic = QPixmap('image.jpg')
        album_cover.setPixmap(album_pic)

        layout.addWidget(album_cover, 1, 0, Qt.AlignHCenter)
        layout.setRowStretch(1, 1)

        self.setCentralWidget(widget)

请注意,无需继续调用
show()
,因为这都是由布局自动处理的。有关更多信息,请参阅Qt文档中的文章。

谢谢您的回答,一切都很好,但是如果我想在同一中心的“艺术”下添加另一个文本,我应该在代码中添加更多内容。Thanks@BarryAllen执行与第一个标签相同的操作,但在调用
addWidget
时将其添加到行
1
。这意味着您在添加相册封面时,还需要将行更改为
2
。(第一个数字是行,第二个数字是列)。