wxpython textctrl автоматически подгоняется под размер текста
Очень простой вопрос:
Я получил текстовое поле 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, но это самый простой пример, который я могу придумать.
Это должно быть что-то простое. Любые идеи о том, как получить то, что я хочу?
Спасибо
1 ответ
Оценка высоты для многострочного textctrls может быть сложным предложением, так как между строками будет неизвестное количество пикселей, какое-то неизвестное количество пространства, требуемого над и под телом текста и т. Д. Кроме того, эти значения могут различаться для разных платформ. или даже между разными версиями одной и той же платформы.
Посмотрите на wx.lib.expando
Модуль и связанный образец в демо. Он пытается справиться с проблемами, указанными выше, и обычно делает довольно хорошую работу.