wxpython StaticText SetFont в диалоге, вызывающий ошибку макета - PullRequest
0 голосов
/ 27 августа 2018

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()

enter image description here enter image description here

...