1

非常に簡単な質問:

長いテキストを表示したい wxpython textctrl ボックスがあります。テキストには改行が含まれる場合があります。ではないかもしれない。

私が何をしても、箱はいつも少し短いようです.

フォントサイズを取得して必要な高さを計算しようとしましたが、数学は機能しているようですが、ボックスが短すぎます...幅は問題なく、私が期待するものです

ここにコードのサンプル:

Message = 'really long text....just an example here............................................................................................................................'

self.MessageBoxText = wx.TextCtrl( self, wx.ID_ANY, Message, wx.DefaultPosition, wx.DefaultSize, wx.TE_RICH|wx.TE_MULTILINE|wx.TE_BESTWRAP)
self.MessageText.SetFont( wx.Font( 18, 74, 90, 90, False, 'Arial') )

dc = wx.WindowDC(self.panel)

textWidthSingle, textHeightSingle = dc.GetTextExtent(self.MessageBoxText.GetValue())

textWidth, textHeight,other =  
dc.GetMultiLineTextExtent(self.MessageText.GetValue(),self.MessageText.GetFont())

self.msgBoxWidth = 800 #pixels
rows = textWidth/self.msgBoxWidth
self.msgBoxHeight = (textHeightSingle * rows) + 20

self.MessageBoxText.SetMinSize((self.msgBoxWidth,self.msgBoxHeight))

self.msgSizer.Add( self.MessageBoxText, 1, wx.ALL|wx.EXPAND, 0 )
self.topSizer.Add(self.msgSizer, 1, wx.ALL|wx.EXPAND , 10)
self.SetSizer(self.topSizer)
self.Fit()
self.Center()

スクロールバーを使用するとテキスト全体を表示できますが、textctrl のサイズを変更して、スクロールバーなしですべてを表示し、大きすぎて画面に収まらない場合にのみスクロールバーが必要になることを望んでいました。

setMinSize は、self.messageBoxText.GetSize() をクエリでき、SetMinSize を使用して設定したよりも短くなるため、機能していないようです。

トップサイザーにもリストボックスとビットマップがあるかもしれませんが、これは私が考えることができる最も基本的な例です。

シンプルなものでなければなりません。私が欲しいものを手に入れる方法についてのアイデアはありますか?

ありがとう

4

1 に答える 1

1

複数行の textctrls の高さの見積もりは、行間に不明な量のピクセル、テキストの本文の上下に必要な不明な量のスペースなどがあるため、注意が必要な提案になる可能性があります。さらに、これらの値はプラットフォームによって異なる可能性があります。 、または同じプラットフォームの異なるバージョン間でも。

wx.lib.expandoデモでモジュールと関連するサンプルを見てください。上記の問題に対処しようとし、通常はかなりうまく機能します。

于 2016-07-11T23:50:20.703 に答える