В моей программе WxPython моя панель ведет себя по-разному в зависимости от того, я делаю это производный класс или экземпляр прямо панель:Производные классы панели в WxPython
import wx class PanelWithText(wx.Panel): def __init__(self, parent): super(PanelWithText, self).__init__(parent) hbox1 = wx.BoxSizer(wx.HORIZONTAL) panel1 = wx.Panel(parent) st1 = wx.StaticText(panel1, label='Some Text') hbox1.Add(st1) class Example(wx.Frame): def __init__(self, parent, title): super(Example, self).__init__(parent, title=title, size=(390, 350)) panel = wx.Panel(self) vbox = wx.BoxSizer(wx.VERTICAL) hbox1 = wx.BoxSizer(wx.HORIZONTAL) # comment out from here panel1 = wx.Panel(panel) # st1 = wx.StaticText(panel1, label='Some Text') # hbox1.Add(st1) # to here # panel1 = PanelWithText(panel) vbox.Add(panel1) panel.SetSizer(vbox) self.Centre() self.Show() if __name__ == '__main__': app = wx.App() Example(None, title='Example') app.MainLoop()
Если я запускаю его как есть, она выглядит хорошо , Если я запустил его, прокомментировав четыре строки, которые создают панель1 и раскомментируют строку, которая создает панель1 с использованием производного класса, «Some Text» получает обрезание и отображает только «Sor». Хуже того, когда я делаю нетривиальную программу.
Эти два, кажется, идентичны мне. В чем разница?
Я использую: Python 2.7.6 WxPython 3.0.0.0 Mac Yosemite 10.10.2
Спасибо, что конечно работает! Чтобы подробно рассказать о любых будущих читателях (что потребовалось мне несколько минут, чтобы понять), моя версия класса создала третью панель (одну в основном фрейме, одну как класс и одну внутри класса), и третий из них перепутал второй. Устранение третьей панели и привязка текста ко второму решению этой проблемы. – ericksonla
Да, у вас было много вложенных панелей. Я смог понять это с помощью инструмента проверки виджетов, который показал мне, что на верхнем уровне есть пара панелей, когда должен быть только один. Вы можете проверить эту удобную утилиту: http://wiki.wxpython.org/Widget%20Inspection%20Tool –