2017-11-14 239 views
1

私はPySideに基づいてGUIを使って作業しています。私はQLineEditの(1行の)テキストボックスを作成し、入力はちょうど4文字の長さです。既に制限が適用されています。QLineEditのテキストボックスの幅を最大4文字までに制限する方法を教えてください。

問題は、テキストボックスよりも広いテキストボックスがあることです(テキストの後に未使用のスペースがたくさんあります)。テキストボックスの長さを短くするにはどうすればよいですか?

これは、Designerでテキストボックスを設計することで簡単に修正できることです。ただし、この特定のテキストボックスはデザイナーで作成されません。

答えて

1

何が欲しいのはあなたのQLineEdit幅を変更し、それを修正、使用の場合:QLineEdit.sizeHint()source 1を見ると

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

はラインエディットが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() 

しかしにQLineEditに「ABCD」などの4つの文字を表示するのに十分ではありません私の場合には24を返しています。より良い値は32のようになります。例えば、あなたのように設定することができます。

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

多くのシステムでフォントが変更されても、まだ問題はないかもしれません。

+0

余分な8ピクセルは '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(* horizo​​nal margin *)と2 * 2(* frame *)は8になります。定数を除いて、私はすべての 'sizeHint'コードをpysideに移植し、計算を検証することができました。 – ekhumoro

関連する問題