PySide Qt:TextEdit Widget的自动垂直增长以及垂直布局中的Widget之间的间距

PySide Qt:TextEdit Widget的自动垂直增长以及垂直布局中的Widget之间的间距,第1张

PySide Qt:TextEdit Widget的自动垂直增长以及垂直布局中的Widget之间的间距 1)布局

此处的另一个答案非常不清楚,可能与布局边距的工作方式有关。它实际上非常简单。

  1. 布局具有内容边距
  2. 小部件具有内容边距

这两个都围绕它们包含的内容定义了一个填充。布局上的边距设置为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表示它们彼此对立。间距是布局的特征,而空白是整个对象的特征。布局周围可以有边距,子元素之间也可以有间距。并且,小部件的子项可以有自己的边距,这些边距是其各个显示的一部分。

layout.setSpacing(10) # 10 pixels between each layout item
2)自动调整大小的QTextEdit

现在是您问题的第二部分。我敢肯定,有几种方法可以创建自动调整大小的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
使其扩展到足以不显示内容的滚动条的程度。

这种方法的水平不是很低。它使用通常公开的信号和小部件的子成员来接收状态更改的通知。利用信号扩展现有窗口小部件的功能是很常见的。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5662103.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存