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 Модуль и связанный образец в демо. Он пытается справиться с проблемами, указанными выше, и обычно делает довольно хорошую работу.

Другие вопросы по тегам