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

5
我正在使用基于PySide的GUI。我用QLineEdit制作了一个(一行)文本框,输入仅限四个字符,这已经成功应用了限制。
问题是我的文本框比需要的宽(即文本后面有很多未使用的空间)。如何缩短文本框的长度?
我知道通过在Designer中设计文本框可以轻松解决此问题; 但是,这个特定的文本框不是在Designer中创建的。
2个回答

8
看一下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()

在我的情况下,返回的是24,这对于在QLineEdit中显示"abcd"等四个字符来说不足够。一个更好的值应该是大约32,你可以像下面这样设置。

e.setMaximumWidth(w+8) # mysterious additional factor required 

即使在许多系统上更改字体,这仍然可能是可以接受的。

4
额外的8像素来自于2*d->horizontalMargin和边框。神秘的horizontalMarginverticalMargin值是在qlineedit_p.cpp中找到的静态常量,分别设置为21。边框值由样式计算得出。所以我们有 2 * 2水平边距)加上 2 * 2边框)等于八。除了常量外,我已成功将所有的sizeHint代码移植到PySide并验证了计算。 - ekhumoro

7
如果您想修改QLineEdit的宽度并固定它,请使用以下代码:
#setFixedWidth(int w)
MyLineEdit.setFixedWidth(120)

你知道我怎么能够将这个与“layout.addWidget(QLineEdit(), 0, 0)”结合使用吗? - Ben

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接