WxPython 4.0.1, Python 2.7.15rc1, Ubunutu 18.04.1
У меня есть сообщение wx.StaticText в диалоговом окне. Если я вызываю SetFont для объекта wx.StaticText, с исходными спецификациями шрифта, это меняет компоновку, в конце он обрезается. Если SetFont не вызывается, верна верстка. Ниже приведен минимальный код, который создает 2 диалоговых окна: первое НЕ вызывает SetFont, которые отображаются правильно, второе вызывает SetFont с нежелательными результатами.
Моя первоначальная цель состояла в том, чтобы изменить текст на моноширинный шрифт wx.FONTFAMILY_TELETYPE, это привело к обнаружению этой проблемы. Я не смог найти комбинацию вызовов .Fit и .Layout, чтобы он работал.
#!/usr/bin/python
import wx
import wx.lib.stattext
class UserDialog(wx.Dialog):
def __init__(self, setfont, msg, title):
wx.Dialog.__init__(self, None, wx.ID_ANY, title)
self.sizer = wx.BoxSizer(wx.VERTICAL)
st= wx.StaticText(self, wx.ID_ANY, msg)
if setfont:
f=st.GetFont()
st.SetFont(wx.Font(f.GetPointSize(), f.GetFamily(), f.GetStyle(), f.GetWeight()))
self.sizer.Add( st, 0, wx.ALL, 5 )
self.SetSizer(self.sizer)
self.sizer.Fit(self)
#self.sizer.Layout()
self.Layout()
self.Show(True)
print self.GetSize()
print self.sizer.GetSize()
if __name__ == '__main__':
print 'wx.VERSION=', wx.VERSION
wxapp = wx.App()
d1_good= UserDialog(False, 'Well hello there, this is a long message!', 'A Dialog Title')
d2_bad = UserDialog(True, 'Well hello there, this is a long message!', 'A Dialog Title')
wxapp.MainLoop()