如何限制 QLineEdit 的文本框宽度最多显示四个字符?

Ner*_*igo 3 python qt pyside qlineedit

我正在使用基于 PySide 的 GUI。我制作了一个(一行)文本框,QLineEdit输入只有四个字符,这是我已经成功应用的限制。

问题是我有一个比需要更宽的文本框(即文本后面有很多未使用的空间)。如何缩短文本框的长度?

我知道这很容易通过使用 Designer 设计文本框来解决;但是,这个特定的文本框不是在 Designer 中创建的。

SRD*_*SRD 7

如果您想要的是修改QLineEdit宽度并修复它,请使用:

#setFixedWidth(int w)
MyLineEdit.setFixedWidth(120)
Run Code Online (Sandbox Code Playgroud)


Tri*_*ion 5

查看源代码QLineEdit.sizeHint()发现行编辑通常足够宽以显示 17 个拉丁“x”字符。我试图在 Python 中复制它并将其更改为显示 4 个字符,但由于 Qt 的 Python 绑定的限制,我未能正确获得行编辑的样式相关边距。

一个简单的:

e = QtGui.QLineEdit()
fm = e.fontMetrics()
m = e.textMargins()
c = e.contentsMargins()
w = 4*fm.width('x')+m.left()+m.right()+c.left()+c.right()
Run Code Online (Sandbox Code Playgroud)

在我的情况下返回 24,但这不足以在 QLineEdit 中显示四个字符,如“abcd”。更好的值大约是 32,您可以设置例如。

e.setMaximumWidth(w+8) # mysterious additional factor required 
Run Code Online (Sandbox Code Playgroud)

即使在许多系统上更改了字体,这可能仍然没问题。

  • 额外的八个像素来自“2*d->horizo​​ntalMargin”和框架。神秘的 `horizo​​ntalMargin` 和 `verticalMargin` 值是在 [qlineedit_p.cpp](https://code.qt.io/cgit/qt/qt.git/tree/src/gui/widgets/qlineedit_p.cpp) 中找到的静态常量#n57),并分别设置为“2”和“1”。框架值是根据样式计算的。所以我们有“2 * 2”(*水平边距*)加上“2 * 2”(*框架*)等于八。除了常量之外,我能够将所有“sizeHint”代码移植到 pyside 并验证计算。 (4认同)