我正在使用QMessageBox中的nice功能来选择向用户显示详细文本。但是,扩展后的窗口仍然相当小,并且会立即尝试调整窗口大小,以便可以看到更多细节。即使设置了我认为正确的设置,它也不允许调整大小。
以下是PyQt4代码的相关片段:
mb = QMessageBox()
mb.setText("Results written to '%s'" % filename)
mb.setDetailedText(str(myData))
mb.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
mb.setSizeGripEnabled(True)
我是否错过了一步和/或这是否可能?
答案 0 :(得分:4)
如果您想制作一个可调整大小的消息框,请检查下面的代码是否适合您:
class MyMessageBox(QtGui.QMessageBox):
def __init__(self):
QtGui.QMessageBox.__init__(self)
self.setSizeGripEnabled(True)
def event(self, e):
result = QtGui.QMessageBox.event(self, e)
self.setMinimumHeight(0)
self.setMaximumHeight(16777215)
self.setMinimumWidth(0)
self.setMaximumWidth(16777215)
self.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
textEdit = self.findChild(QtGui.QTextEdit)
if textEdit != None :
textEdit.setMinimumHeight(0)
textEdit.setMaximumHeight(16777215)
textEdit.setMinimumWidth(0)
textEdit.setMaximumWidth(16777215)
textEdit.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
return result
这里是如何调用messagebox:
mb = MyMessageBox()
mb.setText("Results written to '%s'" % 'some_file_name')
mb.setDetailedText('some text')
mb.exec_()
解决方案取自here
希望这有帮助,尊重
答案 1 :(得分:4)
这是我将使用的解决方案。这不会使对话框可调整大小,但它确实使对话框在可见详细信息框时将其自身更改为合理的大小。我毫不掩饰地从serge_gubenko的回答中窃取了一些想法。即使你宁愿实施他的调整大小,我也谦卑地提供下面的一些其他改进。
# Safe since everything in the namespace begins with 'Q'
from PyQt4.QtGui import *
class MyMessageBox(QMessageBox):
# This is a much better way to extend __init__
def __init__(self, *args, **kwargs):
super(MyMessageBox, self).__init__(*args, **kwargs)
# Anything else you want goes below
# We only need to extend resizeEvent, not every event.
def resizeEvent(self, event):
result = super(MyMessageBox, self).resizeEvent(event)
details_box = self.findChild(QTextEdit)
# 'is not' is better style than '!=' for None
if details_box is not None:
details_box.setFixedSize(details_box.sizeHint())
return result
答案 2 :(得分:0)
这样可行,但仅在Gnome 2下的Linux上进行了测试。它仅在水平方向上调整大小,除非"显示详细信息"文本已打开,在这种情况下,它会在两个方向上调整大小。 "显示细节"按钮仍然会将其重置为初始大小,这可能是一个功能或错误,具体取决于您的pov:
bool MyMessageBox::event(QEvent* e)
{
bool result = QMessageBox::event(e);
// force resizing back on, QMessageBox keeps turning it off:
if (maximumWidth() != QWIDGETSIZE_MAX) {
QTextEdit *textEdit = findChild<QTextEdit*>();
if (textEdit && textEdit->isVisible()) {
textEdit->setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
textEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
} else {
setMaximumWidth(QWIDGETSIZE_MAX);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
}
}
return result;
}