Qt:Q按钮垂直大小,是否适合内容



有什么方法可以可靠地使按钮的高度适合其内容吗?以前的一些答案建议使用布局和大小策略,或最大高度(如何使QPushButton的高度自动适应文本?,在PyQT中增加QPushButton高度,我如何设置QPushButton垂直增长?(,但它们似乎对我不起作用。

请参阅下面的示例。这两个按钮是用它们默认的"一行"高度绘制的,所以里面的文本是剪裁的。将它们的大小策略设置为PreferredMinimum不会更改任何内容。使用addStretch而不是setAlignment不会改变任何内容(使用none会使按钮拉伸以填充窗口,这不是我想要的(。改变最小高度是可行的,但这远不实用,除非有某种方法可以自动计算和设置它

#!/usr/bin/env python3
import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QSize    

class HelloWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
button1 = QPushButton()
l = QVBoxLayout()
l.addWidget(QLabel('One'))
l.addWidget(QLabel('Description of button one'))
button1.setLayout(l)
#button1.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
#button1.setMinimumHeight(50)
button2 = QPushButton()
l = QVBoxLayout()
l.addWidget(QLabel('Two'))
l.addWidget(QLabel('Description of button twonwith extra line'))
button2.setLayout(l)
#button2.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
#button2.setMinimumHeight(65)
layout = QVBoxLayout()
layout.addWidget(button1)
layout.addWidget(button2)
#layout.addStretch(1)
layout.setAlignment(QtCore.Qt.AlignTop)
centralWidget = QWidget(self)          
centralWidget.setLayout(layout)
self.setCentralWidget(centralWidget)   
self.resize(200, 400)

if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
mainWin = HelloWindow()
mainWin.show()
sys.exit( app.exec_() )

问题是按钮通常没有布局,并根据以下内容返回大小提示:

  • 内容(如果存在((图标和/或文本(
  • 基于内容的当前样式(按钮斜面、焦点矩形和按钮边距(的度量,从QStyle.sizeFromContents()返回

在您的情况下,最简单的解决方案是简单地使用按钮文本的换行符(例如:'OnenDescription of button one'(,但如果您想添加一个不是标签的小部件(或想对标签本身有更多的控制权(,则必须覆盖sizeHint:

class ResizableButton(QtWidgets.QPushButton):
def sizeHint(self):
if self.layout():
# the button now has a layout, return its size hint
return self.layout().sizeHint()
# no layout set, return the result of the default implementation
return super().sizeHint()

相关内容

最新更新