鱼C论坛

 找回密码
 立即注册
查看: 142|回复: 3

[已解决]PyQt 自定义按钮的大小如何完全贴合标签

[复制链接]
发表于 2025-3-4 19:48:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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。

可是

                               
登录/注册后可看大图
实际上不能完全贴合。

how can i do?
最佳答案
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() 依赖于内容和样式。
  • 如果问题依然存在,可以尝试使用布局管理器来管理 QPushButtonQLabel,确保布局的自动管理特性。


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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() 依赖于内容和样式。
  • 如果问题依然存在,可以尝试使用布局管理器来管理 QPushButtonQLabel,确保布局的自动管理特性。


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-3-4 19:56:02 | 显示全部楼层
FishC 发表于 2025-3-4 19:48
要让 QPushButton 的大小完全贴合 QLabel 的大小,可以尝试以下方法:

调整按钮大小方法

提个建议,回答问题能不能直接指出需要修改的地方,不要全搞
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-2 02:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表