栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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
使其扩展到足以不显示内容的滚动条的程度。

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/660036.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号