【问题标题】:Decreasing distance between text and edge for QPushButton?减少 QPushButton 的文本和边缘之间的距离?
【发布时间】:2018-06-19 02:18:42
【问题描述】:

我们如何减少QPushButton 内的文本字符串与边缘之间的距离?

对我来说(在 LXDE 上)它现在看起来像这样:

self.on_qpb = QtWidgets.QPushButton(self.tr("On"))
hbox.addWidget(self.on_qpb)
self.on_qpb.setCheckable(True)
self.on_qpb.toggled.connect(self.on_on_toggled)

我们希望得到这样的结果:

我们使用setFixedWidth 实现了后者,但是在翻译成其他语言时会产生问题

你有什么推荐的?感谢您的帮助!

【问题讨论】:

  • 我不知道这是否可能与一个属性,但你可以采取按钮文本长度和相应地调整宽度类似于len(B_text0)*10

标签: python pyqt pyqt5 qpushbutton


【解决方案1】:

一个可能的解决方案是在QFontMetrics的帮助下根据文本设置文本的宽度,或者您可以创建一个实现具有大小策略的逻辑的类并返回适当的sizeHint(),如下面的例子:

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

class PushButton(QPushButton):
    def __init__(self, *args, **kwargs):
        QPushButton.__init__(self, *args, **kwargs)
        self.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum)

    def sizeHint(self):
        w = self.fontMetrics().width(" {} ".format(self.text()))
        h = QPushButton.sizeHint(self).height()
        return QSize(w, h)


class Widget(QWidget):
    def __init__(self, *args, **kwargs):
        QWidget.__init__(self, *args, **kwargs)
        hbox = QHBoxLayout(self)

        self.on_qpb = QPushButton(self.tr("On"))
        self.on_qpb.setCheckable(True)
        self.on_qpb.setFixedWidth(self.on_qpb.fontMetrics().width(" {} ".format(self.on_qpb.text())))

        self.off_qpb = PushButton(self.tr("Off"))
        self.off_qpb.setCheckable(True)

        hbox.addWidget(self.on_qpb)
        hbox.addWidget(self.off_qpb)

if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

【讨论】: