2016-07-06 5 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 и переустановку. Выполнение этого, как это, позволило мне удалить совсем немного «заставляя» размеры и просто позволяя sizers выполнять свою работу. Его фанки приходится вписываться дважды, но он отлично смотрелся над моим тестовым слоем из 30 + комбинаций растровых изображений, textctrls, listboxes, comboboxes. Может помочь кому-то в будущем. Но я определенно смотрю на expando! спасибо Робин! – pyNewbie

ответ

1

Оценка высоты для многопоточных textctrls может быть сложным предложением, так как там будет неизвестное количество пикселей между строками, некоторые неизвестное количество требуемого пространства выше и ниже основного текста и т.д. На что эти значения могут различаться на разных платформах или даже между разными версиями одной и той же платформы.

Посмотрите на модуль wx.lib.expando и соответствующий образец в демонстрации. Он пытается справиться с проблемами, указанными выше, и обычно выполняет довольно хорошую работу.