如何在Python 3.5,PyQt5中调整QMessageBox的大小

ztigrdn8  于 2023-07-01  发布在  Python
关注(0)|答案(2)|浏览(1005)

我的QMessageBox太短了。
我尝试了各种增加高度的方法,例如 resize,setMinimumHeight,setSizeIncrement + setSizeGripEnabled,但这些尝试都不起作用。设置SizeGrip根本不允许我调整窗口的大小。

  1. dialog = QMessageBox(self)
  2. dialog.setWindowTitle('About this programme')
  3. dialog.setText('Introductory text')
  4. dialog.setDetailedText('A bunch more text')
  5. dialog.setMinimumHeight(500)
  6. dialog.setSizeIncrement(1, 1)
  7. dialog.setSizeGripEnabled(True)
  8. dialog.show()

为了在图片中参考,标记为Rotascript的窗口具有大小360x、370y。
我做错了什么,还是这是某种bug?
先谢谢你。

6fe3ivhb

6fe3ivhb1#

你没做错什么众所周知,QMessageBox很难调整大小。
一般来说,人们使用以下三种方法之一:
1.使用带换行符的setText()而不是setInformativeText()
消息框将根据setText()方法设置的文本调整大小。这是一个很麻烦的方法,但是你可以在setText()中包含一堆白色。
1.尝试覆盖QMessageBox的布局
这包括修改setFixedSize或覆盖小部件的event方法。这里是a good example from a related SO post
1.重新实现QMessageBox
QMessageBox的一个基本属性是它不会调整大小。所以,通过反向逻辑,if you want a message box which resizes, you actually don't want a message box。但是,QMessageBox继承自QDialog。通过在继承链中向上移动一级,并从QDialog重新实现所需的特性,您可能能够实现您想要的功能。
以下资源为我的回应提供了信息:

jfewjypa

jfewjypa2#

在PySide6中,这对我很有效:

  1. dialog.findChild(QGridLayout).setColumnMinimumWidth(1,len(dialog.informativeText()) * dialog.fontMetrics().averageCharWidth())

相关问题