非常简单的问题:
我有一个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中有一个列表框和位图,但这是我能想到的最基本的例子。
它必须变得简单。关于如何得到我想要的任何想法?
感谢
答案 0 :(得分:1)
估计多行文本的高度可能是一个棘手的命题,因为行之间将存在未知数量的像素,文本正文上方和下方需要一些未知的空间量等等。除此之外,这些值可以不同平台,甚至同一平台的不同版本之间都有所不同。
查看演示中的wx.lib.expando
模块和相关示例。它试图解决上面提到的问题,通常做得很好。