2016-07-06 52 views
1

很简单的问题:wxPython的textctrl自动调整大小以适应文本

Ive得到了一个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

我按照我想要的方式工作,将textctrl值留空,将其添加到我的sizer,装配所有内容,然后设置textctrl的值并重新进行修改。这样做可以让我删除相当多的“强制”大小,只是让sizer完成他们的工作。它的时髦不得不适合两次,但它看起来完美超过了我的测试床上30位以上的位图,textctrls,listboxes,comboboxes的组合。未来可能会帮助别人。但我肯定会看看expando!感谢罗宾! – pyNewbie

回答

1

估算用于多textctrls高度可以是一个棘手的问题,因为会有行之间的像素的未知量,上面和下面正文中,等。在需要的空间中的一些未知量最重要的是,这些值可以跨平台,甚至同一平台的不同版本之间有所不同。

看看演示中的wx.lib.expando模块和相关示例。它试图处理上述问题,通常做得很好。

相关问题