将图标放在右侧并将文本居中放置在 QPushButton 中

ekd*_*kdm 2 python python-3.x qicon qpushbutton pyqt5

我正在尝试将图标向右对齐并将文本放在 QPushButton 中,但我目前对结果不满意。我还希望图标完全位于 QPushButton 的右侧,而不是与文本居中。同样,我希望它能够与位于右侧或左侧的图标一起使用,同时能够选择按钮的宽度。你有解决方案吗 ?你能帮助我吗 ?这是我现在的代码:

\n\n
# Les boutons du bas pour passer d\'une page \xc3\xa0 l\'autre\nbout_pag_charg_enr_phase_1 = QPushButton("Aller directement \xc3\xa0 la page de maintenance de la S\xc3\xa9quence")\nbout_pag_charg_enr_phase_1.setFixedWidth(406)\nbout_pag_charg_enr_phase_1.setIcon(QIcon(\'logo_png_apsc\'+os.sep+\'icone_3_fleches_droite_apsc_256x256.png\'))\nbout_pag_charg_enr_phase_1.setIconSize(QSize(16, 16))\nbout_pag_charg_enr_phase_1.setLayoutDirection(Qt.RightToLeft)\nbout_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")\nbout_pag_suivante_phase_1 = QPushButton("Page suivante")\nbout_pag_suivante_phase_1.setFixedWidth(120)\nbout_pag_suivante_phase_1.setIcon(QIcon(\'logo_png_apsc\'+os.sep+\'icone_2_fleches_droite_apsc_256x256.png\'))\nbout_pag_suivante_phase_1.setIconSize(QSize(16, 16))\nbout_pag_suivante_phase_1.setLayoutDirection(Qt.RightToLeft)\nbout_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")\n
Run Code Online (Sandbox Code Playgroud)\n\n

我得到什么:

\n\n

在此输入图像描述

\n\n

我想要的是:

\n\n

在此输入图像描述

\n

eyl*_*esc 6

一个可能的解决方案是在顶部和右侧放置一个显示图标的 QLabel。

\n\n
import os\nfrom PyQt5 import QtCore, QtGui, QtWidgets\n\nclass PushButton(QtWidgets.QPushButton):\n    def __init__(self, *args, **kwargs):\n        super(PushButton, self).__init__(*args, **kwargs)\n        self.setStyleSheet(\'\'\'background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #fdfbf7, stop: 1 #6190F2);\n            border-style: solid;border-width: 2px;\n            border-radius: 8px;\n            border-color: #9BB7F0;padding: 3px;\'\'\')\n\n        icon = self.icon()\n        icon_size = self.iconSize()\n        # remove icon\n        self.setIcon(QtGui.QIcon())\n        label_icon = QtWidgets.QLabel()\n        label_icon.setAttribute(QtCore.Qt.WA_TranslucentBackground)\n        label_icon.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents)\n        lay = QtWidgets.QHBoxLayout(self)\n        lay.setContentsMargins(0, 0, 0, 0)\n        lay.addWidget(label_icon, alignment=QtCore.Qt.AlignRight)\n        label_icon.setPixmap(icon.pixmap(icon_size))\n\nclass MyWindow(QtWidgets.QWidget):\n    def __init__(self, parent=None):\n        super(MyWindow, self).__init__(parent)\n\n        icon = QtWidgets.QApplication.style().standardIcon(QtWidgets.QStyle.SP_ArrowRight)\n        # icon = QtGui.QIcon(os.path.join(\'logo_png_apsc\', \'icone_3_fleches_droite_apsc_256x256.png\'))\n\n        bout_pag_charg_enr_phase_1 = PushButton("Aller directement \xc3\xa0 la page de maintenance de la S\xc3\xa9quence",\n            icon=icon, iconSize=QtCore.QSize(16, 16))\n        bout_pag_charg_enr_phase_1.setFixedWidth(506)\n\n        bout_pag_suivante_phase_1 = PushButton("Page suivante",\n            icon=icon, iconSize=QtCore.QSize(16, 16))\n        bout_pag_suivante_phase_1.setFixedWidth(140)\n\n        lay = QtWidgets.QHBoxLayout(self)\n        lay.addWidget(bout_pag_charg_enr_phase_1)\n        lay.addWidget(bout_pag_suivante_phase_1)        \n\nif __name__ == \'__main__\':\n    import sys\n    app = QtWidgets.QApplication(sys.argv)\n    main = MyWindow()\n    main.show()\n    sys.exit(app.exec_())\n
Run Code Online (Sandbox Code Playgroud)\n\n

在此输入图像描述

\n