【问题标题】:How can I limit text box width of QLineEdit to display at most four characters?如何限制 QLineEdit 的文本框宽度最多显示四个字符?
【发布时间】:2018-04-27 08:57:33
【问题描述】:

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

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

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

【问题讨论】:

    标签: python qt pyside qlineedit


    【解决方案1】:

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

    #setFixedWidth(int w)
    MyLineEdit.setFixedWidth(120)
    

    【讨论】:

      【解决方案2】:

      查看QLineEdit.sizeHint()source 会发现行编辑通常足够宽以显示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 
      

      即使在许多系统上更改了字体,这仍然可以。

      【讨论】:

      • 额外的八个像素来自2*d->horizontalMargin 和框架。神秘的horizontalMarginverticalMargin 值是qlineedit_p.cpp 中的静态常量,分别设置为21。框架值由样式计算。所以我们有2 * 2水平边距)加上2 * 2frame)等于八。除了常量之外,我能够将所有 sizeHint 代码移植到 pyside 并验证计算。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-17
      • 2018-09-01
      相关资源
      最近更新 更多