非常简单的问题:
我有一个wxpython文本控制框,我想在其中显示一个长文本。 文本可能包含换行符。 可能不会。
无论我做什么,盒子似乎总是有点短。
我到了获取字体大小并尝试计算所需高度的程度,数学似乎有效,但框太短了......宽度很好,我所期望的
此处的代码示例:
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中也有一个列表框和位图,但这是我能想到的最基本的例子。
它必须很简单。 关于如何得到我想要的东西的任何想法?
谢谢
估计多行 textctrl 的高度可能是一个棘手的命题,因为行之间会有未知数量的像素,文本正文上方和下方需要一些未知的空间量等。最重要的是,这些值可能因平台而异,甚至在同一平台的不同版本之间也是如此。
查看演示中的wx.lib.expando
模块和相关示例。 它试图处理上面确定的问题,并且通常做得很好。