wxpython textctrl自动调整大小以适合文本

时间:2016-07-06 20:29:55

标签: wxpython wxtextctrl

非常简单的问题:

我有一个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设置它更短。

我也可能在topSizer中有一个列表框和位图,但这是我能想到的最基本的例子。

它必须变得简单。关于如何得到我想要的任何想法?

感谢

1 个答案:

答案 0 :(得分:1)

估计多行文本的高度可能是一个棘手的命题,因为行之间将存在未知数量的像素,文本正文上方和下方需要一些未知的空间量等等。除此之外,这些值可以不同平台,甚至同一平台的不同版本之间都有所不同。

查看演示中的wx.lib.expando模块和相关示例。它试图解决上面提到的问题,通常做得很好。