簡體   English   中英

右邊的對齊圖標將文本放在QPushButton中

[英]Align icon on the right and center the text in a QPushButton

我正在嘗試將圖標向右對齊並將文本放在QPushButton中,但是目前我對結果不滿意。 我還希望圖標完全位於QPushButton的右側,而不是與文本居中。 同樣,我希望此圖標可以位於右側或左側,同時可以選擇按鈕的寬度。 你有解決方案嗎 ? 你能幫助我嗎 ? 現在是我的代碼:

# Les boutons du bas pour passer d'une page à l'autre
bout_pag_charg_enr_phase_1 = QPushButton("Aller directement à la page de maintenance de la Séquence")
bout_pag_charg_enr_phase_1.setFixedWidth(406)
bout_pag_charg_enr_phase_1.setIcon(QIcon('logo_png_apsc'+os.sep+'icone_3_fleches_droite_apsc_256x256.png'))
bout_pag_charg_enr_phase_1.setIconSize(QSize(16, 16))
bout_pag_charg_enr_phase_1.setLayoutDirection(Qt.RightToLeft)
bout_pag_charg_enr_phase_1.setStyleSheet("text-align: center; background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #fdfbf7, stop: 1 #6190F2);border-style: solid;border-width: 2px;border-radius: 8px;border-color: #9BB7F0;padding: 3px")
bout_pag_suivante_phase_1 = QPushButton("Page suivante")
bout_pag_suivante_phase_1.setFixedWidth(120)
bout_pag_suivante_phase_1.setIcon(QIcon('logo_png_apsc'+os.sep+'icone_2_fleches_droite_apsc_256x256.png'))
bout_pag_suivante_phase_1.setIconSize(QSize(16, 16))
bout_pag_suivante_phase_1.setLayoutDirection(Qt.RightToLeft)
bout_pag_suivante_phase_1.setStyleSheet("background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #fdfbf7, stop: 1 #6190F2);border-style: solid;border-width: 2px;border-radius: 8px;border-color: #9BB7F0;padding: 3px")

我得到的是:

在此處輸入圖片說明

我想要的是:

在此處輸入圖片說明

一個可能的解決方案是在QLabel的頂部和右側放置顯示圖標的QLabel。

import os
from PyQt5 import QtCore, QtGui, QtWidgets

class PushButton(QtWidgets.QPushButton):
    def __init__(self, *args, **kwargs):
        super(PushButton, self).__init__(*args, **kwargs)
        self.setStyleSheet('''background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #fdfbf7, stop: 1 #6190F2);
            border-style: solid;border-width: 2px;
            border-radius: 8px;
            border-color: #9BB7F0;padding: 3px;''')

        icon = self.icon()
        icon_size = self.iconSize()
        # remove icon
        self.setIcon(QtGui.QIcon())
        label_icon = QtWidgets.QLabel()
        label_icon.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        label_icon.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents)
        lay = QtWidgets.QHBoxLayout(self)
        lay.setContentsMargins(0, 0, 0, 0)
        lay.addWidget(label_icon, alignment=QtCore.Qt.AlignRight)
        label_icon.setPixmap(icon.pixmap(icon_size))

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

        icon = QtWidgets.QApplication.style().standardIcon(QtWidgets.QStyle.SP_ArrowRight)
        # icon = QtGui.QIcon(os.path.join('logo_png_apsc', 'icone_3_fleches_droite_apsc_256x256.png'))

        bout_pag_charg_enr_phase_1 = PushButton("Aller directement à la page de maintenance de la Séquence",
            icon=icon, iconSize=QtCore.QSize(16, 16))
        bout_pag_charg_enr_phase_1.setFixedWidth(506)

        bout_pag_suivante_phase_1 = PushButton("Page suivante",
            icon=icon, iconSize=QtCore.QSize(16, 16))
        bout_pag_suivante_phase_1.setFixedWidth(140)

        lay = QtWidgets.QHBoxLayout(self)
        lay.addWidget(bout_pag_charg_enr_phase_1)
        lay.addWidget(bout_pag_suivante_phase_1)        

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    main = MyWindow()
    main.show()
    sys.exit(app.exec_())

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM