player-none 发表于 2025-3-4 19:48:13

PyQt 自定义按钮的大小如何完全贴合标签

本帖最后由 player-none 于 2025-3-15 12:22 编辑

我自定义了一个 QButtonLabel 类。

class QButtonLabel(QPushButton):
    def __init__(self, text, onclick, parent):
      super().__init__(parent)
      self.setStyleSheet('background-color: rgba(0, 0, 0, 0); border: 0px;')
      self.label = QLabel(text, self)
      self.label.move(0, 0)
      self.setFixedSize(self.label.size())
      self.clicked.connect(onclick)
      self.setCursor(Qt.CursorShape.PointingHandCursor)

    def enterEvent(self, event):
      font = QFont()
      font.setBold(True)
      font.setUnderline(True)
      self.label.setFont(font)

    def leaveEvent(self, event):
      self.label.setFont(QFont())


可以看到,通过“self.setFixedSize(self.label.size())”,QButtonLabel 应该完全贴合 QLabel。

可是https://t.tutu.to/img/COMq4实际上不能完全贴合。

how can i do?

FishC 发表于 2025-3-4 19:48:27

要让 QPushButton 的大小完全贴合 QLabel 的大小,可以尝试以下方法:

调整按钮大小方法

[*]在初始化 QPushButton 的大小时使用 self.label.sizeHint() 来获取合适的尺寸。
[*]在布局和显示时使用自适应布局来控制组件大小和位置。


可以尝试以下的代码修改:


class QButtonLabel(QPushButton):
    def __init__(self, text, onclick, parent):
      super().__init__(parent)
      self.setStyleSheet('background-color: rgba(0, 0, 0, 0); border: 0px;')

      # 创建并设置 QLabel
      self.label = QLabel(text, self)
      self.label.move(0, 0)
      
      # 使用 sizeHint 来设置固定大小
      self.setFixedSize(self.label.sizeHint())
      
      self.clicked.connect(onclick)
      self.setCursor(Qt.CursorShape.PointingHandCursor)

    def enterEvent(self, event):
      font = QFont()
      font.setBold(True)
      font.setUnderline(True)
      self.label.setFont(font)

    def leaveEvent(self, event):
      self.label.setFont(QFont())


注意事项

[*]确保 QLabel 内容在初始化时已加载完毕,因为 sizeHint() 依赖于内容和样式。
[*]如果问题依然存在,可以尝试使用布局管理器来管理 QPushButton 和 QLabel,确保布局的自动管理特性。


你也可以使用图床提供的链接插入图片,但是由于支持 BBCode 的限制,图像无法直接嵌入论坛帖子。请直接访问链接:tutu.to/image/COMq4 以查看问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

player-none 发表于 2025-3-4 19:56:02

FishC 发表于 2025-3-4 19:48
要让 QPushButton 的大小完全贴合 QLabel 的大小,可以尝试以下方法:

调整按钮大小方法


提个建议,回答问题能不能直接指出需要修改的地方,不要全搞

FishC 发表于 2025-3-4 19:56:24

player-none 发表于 2025-03-04 19:56
FishC 发表于 2025-3-4 19:48
要让 QPushButton 的大 ...

当然可以!你只需要修改下面这一行即可:

self.setFixedSize(self.label.size())

为:

self.setFixedSize(self.label.sizeHint())

这样可以确保按钮大小按文本内容自适应调整。其他部分无需修改。希望这个解决方案能帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: PyQt 自定义按钮的大小如何完全贴合标签