很简单的问题: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中有一个列表框和位图,但这是我能想到的最基本的例子。
它必须是简单的东西。关于如何获得我想要的任何想法?
感谢
我按照我想要的方式工作,将textctrl值留空,将其添加到我的sizer,装配所有内容,然后设置textctrl的值并重新进行修改。这样做可以让我删除相当多的“强制”大小,只是让sizer完成他们的工作。它的时髦不得不适合两次,但它看起来完美超过了我的测试床上30位以上的位图,textctrls,listboxes,comboboxes的组合。未来可能会帮助别人。但我肯定会看看expando!感谢罗宾! – pyNewbie