我有以下代码:
import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * TEXT = "Lorem ipsum dolor sit amet,consectetur adipiscing elit. " \ "Nullam malesuada tellus in ex elementum,vitae rutrum enim vestibulum." #============================================================================== class Window(QWidget): def __init__(self,*args,**kwargs): QWidget.__init__(self,**kwargs) # Widgets self.label = QLabel(TEXT,self) # self.label.setWordWrap(True) self.text = QTextEdit(self) self.text.setMinimumSize(480,320) self.text.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding) # Layout self.layout = QGridLayout() self.layout.addWidget(self.label,0) self.layout.addWidget(self.text,1,0) self.layout.setContentsMargins(5,5,5) self.layout.setSpacing(5) self.setLayout(self.layout) self.adjustSize() self.show() #============================================================================== if __name__ == "__main__": app = QApplication(sys.argv) win = Window() sys.exit(app.exec_())
它按预期工作,产生一个窗口,不能调整为更小:
但是,当我取消注释self.label.setWordWrap(True)行时,这些约束似乎消失了.我可以将窗口调整为更小,完全打破布局,因为QTextEdit仍然保持其大小约束:
我尝试使用self.setMinimumSize(self.size())来解决这个问题.这适用于此特定示例,但是如果大小较大则会中断,例如self.text.setMinimumSize(480,800).这使得窗口即使在创建时也太小,因此setMinimumSize没有帮助:
有没有办法解决它并使窗口/布局仍然匹配QTextEdit的最小大小,即使启用了自动换行?
版本信息:
OS: Windows-7-SP1 (32bit) Python: 3.4.1 PyQt: 5.3.1 Qt: 5.3.1
解决方法
正如@thuga在评论中提出的那样,问题在
docs和
reported中提到,显然是“不会/不能解决”决议.
我找到了一个针对此特定问题here的解决方法的提示.它适用于我的示例以及我的应用程序:
self.setMinimumSize(self.sizeHint()).
然后代码如下所示:
import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * TEXT = "Lorem ipsum dolor sit amet,self) self.label.setWordWrap(True) self.text = QTextEdit(self) self.text.setMinimumSize(480,800) self.text.setSizePolicy(QSizePolicy.Expanding,5) self.layout.setSpacing(5) self.setLayout(self.layout) self.setMinimumSize(self.sizeHint()) self.show() #============================================================================== if __name__ == "__main__": app = QApplication(sys.argv) win = Window() sys.exit(app.exec_())