此处的另一个答案非常不清楚,可能与布局边距的工作方式有关。它实际上非常简单。
- 布局具有内容边距
- 小部件具有内容边距
这两个都围绕它们包含的内容定义了一个填充。布局上的边距设置为2意味着在所有边上填充2个像素。如果您有父子窗口小部件和布局(在编写UI时总是如此),则每个对象都可以具有特定的边距,这些边距会分别生效。也就是说…将页边距指定为2的父级布局,将页边距指定为2的子级布局将有效地显示4个像素的页边距(显然,如果小部件具有框架,则在它们之间会绘制一些框架。
一个简单的布局示例说明了这一点:
w = QtGui.QWidget()w.resize(600,400)layout = QtGui.QVBoxLayout(w)layout.setMargin(10)frame = QtGui.Qframe()frame.setframeShape(frame.Box)layout.addWidget(frame)layout2 = QtGui.QVBoxLayout(frame)layout2.setMargin(20)frame2 = QtGui.Qframe()frame2.setframeShape(frame2.Box)layout2.addWidget(frame2)
您可以看到顶级边距在每一侧都是10,子布局在每一侧都是20。数学上没有什么真正复杂的。
保证金也可以逐个指定:
# left: 20, top: 0, right: 20, bottom: 0layout.setContentsMargins(20,0,20,0)
还可以选择在布局上设置间距。间距是放置在布局的每个子元素之间的像素数量。将其设置为0表示它们彼此对立。间距是布局的特征,而空白是整个对象的特征。布局周围可以有边距,子元素之间也可以有间距。并且,小部件的子项可以有自己的边距,这些边距是其各个显示的一部分。
2)自动调整大小的QTextEditlayout.setSpacing(10) # 10 pixels between each layout item
现在是您问题的第二部分。我敢肯定,有几种方法可以创建自动调整大小的QTextEdit。但是,一种解决方法是观察文档中的内容更改,然后根据文档高度调整小部件:
class Window(QtGui.QDialog): def __init__(self): super(Window, self).__init__() self.resize(600,400) self.mainLayout = QtGui.QVBoxLayout(self) self.mainLayout.setMargin(10) self.scroll = QtGui.QScrollArea() self.scroll.setWidgetResizable(True) self.scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) self.mainLayout.addWidget(self.scroll) scrollContents = QtGui.QWidget() self.scroll.setWidget(scrollContents) self.textLayout = QtGui.QVBoxLayout(scrollContents) self.textLayout.setMargin(10) for _ in xrange(5): text = GrowingTextEdit() text.setMinimumHeight(50) self.textLayout.addWidget(text)class GrowingTextEdit(QtGui.QTextEdit): def __init__(self, *args, **kwargs): super(GrowingTextEdit, self).__init__(*args, **kwargs) self.document().contentsChanged.connect(self.sizeChange) self.heightMin = 0 self.heightMax = 65000 def sizeChange(self): docHeight = self.document().size().height() if self.heightMin <= docHeight <= self.heightMax: self.setMinimumHeight(docHeight)
我将其子类化为
QTextEdit->
GrowingTextEdit,并将从其文档发出的信号连接到
sizeChange用于检查文档高度的插槽。我还包括了heightMin和heightMax属性,可让您指定允许自动增长的大小。如果您尝试这样做,您会看到在框中输入内容时,小部件将开始自动调整大小,并且在删除行时也会缩小。您也可以根据需要关闭滚动条。现在,除了父滚动区域外,每个文本编辑都有自己的条形图。另外,我认为您可以在上添加一个小的填充值,以
docHeight使其扩展到足以不显示内容的滚动条的程度。
这种方法的水平不是很低。它使用通常公开的信号和小部件的子成员来接收状态更改的通知。利用信号扩展现有窗口小部件的功能是很常见的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)