使用 PySide 时如何将文本放在图像前面?

问题描述 投票:0回答:1

我正在使用 PySide 创建一个程序来构建 GUI。除了我的一个循环之外,一切都很完美。基本要点是我试图将文本放在按钮图像前面,但我看到的是左侧的按钮图像,以及该图像右侧的按钮文本。

这是按钮设置循环:

for i, buttonText in enumerate(self.buttonTextLeft):
    cBut=QPushButton(buttonText, self)
    cBut.setIcon(QIcon(resPixmap))
    cBut.setIconSize(resPixmap.size())
    cBut.setStyleSheet(f"font-family: {self.language}; font-size: 12px; font-weight: bold; background-color: transparent; border: none;")
    cBut.setGeometry(0, int(self.bTL*self.height()),int(self.topButtonWidth*self.width()),int(self.leftButtonWidth*self.height()))
    cBut.clicked.connect(lambda checked,index=i:self.optionButtonsClickLeft(index))
    self.optionButtonsLeft.append(cBut)
    self.bTL+=self.leftButtonWidth

正如我所说,其他一切都很完美,除了文本不会出现在按钮前面。

注意: buttonTextLeft 是一个数组,其中填充了我想要在每个按钮前面显示的字符串 bTL 和 leftButtonWidth 是仅用于放置每个按钮的数值...这些工作正常,与问题无关。

python pyside
1个回答
0
投票

经过几个小时的故障排除后最终解决了这个问题(将按钮图像设置为背景),甚至设法重写了一些变量计算,以便按钮根据屏幕的大小重新调整大小,这只是一个潜在的问题,现在也已解决。

新代码:

    for i,buttonText in enumerate(self.buttonTextLeft):
        cBut=QPushButton(buttonText,self)
        cBut.setStyleSheet(f"font-family:{self.language};
                            font-size:12px;
                            font-weight:bold;
                            color:{self.colorGold};
                            background-color:transparent;
                            border:none;
                            background-image:url('MDButton3.png');")
        cBut.setFixedSize(buttonSize,buttonSize+2)
        #Calculates the y position for each button
        yPos=spacing*(i+1)+buttonSize*i
        cBut.setGeometry(
            spaceFromTopAndBottom,
            yPos+spaceFromTopAndBottom,
            int(self.topButtonWidth*self.width()),
            buttonSize)
        cBut.clicked.connect(lambda checked,index=i: self.optionButtonsClickLeft(index))
        self.optionButtonsLeft.append(cBut)
© www.soinside.com 2019 - 2024. All rights reserved.