0

我正在使用 PyQt6 制作一个小型音乐播放器。我希望在单击四个流派按钮中的任何一个之前隐藏 QListWidget 并在单击后显示。您可以查看以下图片。

(前):

(前)

(单击按钮后我希望看到的内容):

(单击按钮后我希望看到的内容)

单击微笑(快乐)按钮后,列表出现但不正确。我的工具按钮被压缩了。

(我现在看到的):

(我现在看到的)

这是我的代码。

from PyQt6.QtWidgets import *
from PyQt6.QtGui import *
from PyQt6.QtCore import*
class atmoUI(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):
        super().__init__()
        layout=QVBoxLayout(self)
        atmo_layout=QGridLayout(self)
        self.aggressive=QToolButton(self)
        self.aggressive.setFixedSize(100,100)
        self.aggressive.setIcon(QIcon('./img/aggressive.png'))
        self.aggressive.setIconSize(QSize(100,100))
        self.aggressive.setToolTip('aggressive')
        self.happy=QToolButton(self)
        self.happy.setFixedSize(100,100)
        self.happy.setIcon(QIcon('./img/happy.png'))
        self.happy.setIconSize(QSize(100,100))
        self.happy.setToolTip('happy')
        self.romantic=QToolButton(self)
        self.romantic.setFixedSize(100,100)
        self.romantic.setIcon(QIcon('./img/romantic.png'))
        self.romantic.setIconSize(QSize(100,100))
        self.romantic.setToolTip('romantic')
        self.sad=QToolButton(self)
        self.sad.setFixedSize(100,100)
        self.sad.setIcon(QIcon('./img/sad.png'))
        self.sad.setIconSize(QSize(100,100))
        self.sad.setToolTip('sad')
    
        atmo_layout.addWidget(self.aggressive,0,0)
        atmo_layout.addWidget(self.happy,0,1)
        atmo_layout.addWidget(self.romantic,1,0)
        atmo_layout.addWidget(self.sad,1,1)

        self.play=QPushButton(self)
        self.pause=QPushButton(self)
        self.play.setText('play')
        self.pause.setIcon(QIcon('./img/pause.png'))

        self.songlist=QListWidget(self)

        self.home=QPushButton(self)
        self.home.setText("home")
        self.home.setIcon(QIcon('./img/home.png'))
        layout.addLayout(atmo_layout)
        layout.addWidget(self.songlist)
        layout.addWidget(self.play)
        layout.addWidget(self.pause)
        layout.addWidget(self.home)
        self.play.setVisible(False)
        self.pause.setVisible(False)
        self.songlist.setVisible(False)
        self.setLayout(layout)

我是 PyQt 的新手,我搜索了一段时间,但仍然找不到解决方案。有谁知道如何解决这一问题?

4

1 回答 1

1

你有很多混乱和冗余的代码,所以我将避免分析它,但只会指出一个可能的实现。

在这种情况下,可以使用 QGridLayout 而无需 QVBoxLayout。

from PyQt6.QtWidgets import (
    QApplication,
    QGridLayout,
    QListWidget,
    QPushButton,
    QToolButton,
    QWidget,
)
from PyQt6.QtGui import QIcon
from PyQt6.QtCore import QSize


class Widget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.aggressive_button = self.create_button(
            QIcon("./img/aggressive.png"), QSize(100, 100), "aggressive"
        )
        self.happy_button = self.create_button(
            QIcon("./img/happy.png"), QSize(100, 100), "happy"
        )
        self.romantic_button = self.create_button(
            QIcon("./img/romantic.png"), QSize(100, 100), "romantic"
        )
        self.sad_button = self.create_button(
            QIcon("./img/sad.png"), QSize(100, 100), "sad"
        )
        self.songlist_widget = QListWidget()
        self.play_button = QPushButton(text="play")
        self.pause_button = QPushButton(icon=QIcon("./img/pause.png"))
        self.home_button = QPushButton(text="home", icon=QIcon("./img/home.png"))

        lay = QGridLayout(self)
        lay.addWidget(self.aggressive_button, 0, 0)
        lay.addWidget(self.happy_button, 0, 1)
        lay.addWidget(self.romantic_button, 1, 0)
        lay.addWidget(self.sad_button, 1, 1)
        lay.addWidget(self.songlist_widget, 2, 0, 1, 2)
        lay.addWidget(self.play_button, 3, 0, 1, 2)
        lay.addWidget(self.pause_button, 4, 0, 1, 2)
        lay.addWidget(self.home_button, 5, 0, 1, 2)
        lay.setRowStretch(6, -1)

        self.play_button.hide()
        self.pause_button.hide()
        self.songlist_widget.hide()

        self.resize(self.width(), 400)
        self.setFixedWidth(self.sizeHint().width())

        self.happy_button.clicked.connect(self.handle_happy_clicked)

    def create_button(self, icon, size, tooltip):
        button = QToolButton(icon=icon, iconSize=size)
        button.setFixedSize(size)
        button.setToolTip(tooltip)
        return button

    def handle_happy_clicked(self):
        self.songlist_widget.show()


if __name__ == "__main__":
    app = QApplication([])
    window = Widget()
    window.show()
    app.exec()
于 2021-07-16T21:53:13.580 回答