2015-04-27 3 views
1

Я создаю ноутбук WxPython после вызова из пункта меню, но, к сожалению, он не отображается правильно (видится только небольшая синяя фигура в углу). Я должен вручную изменить размер окна, и он возвращается к рабочему порядку, как и второе изображение.WxPython не отображается правильно

wrong

correct

Код:

def load_notebook(self): 
    panel = wx.Panel(self) 
    sizer = wx.BoxSizer(wx.VERTICAL) 
    notebook = apps.srp.main.Notebook(panel) 
    sizer.Add(notebook, 1, wx.ALL | wx.EXPAND, 5) 
    panel.SetSizer(sizer) 

Вещи, которые я пробовал:

self.Layout() 
self.Refresh() 
self.Update() 
notebook.Layout() 
notebook.Refresh() 
notebook.Update() 

как в главном каталоге и папку, в которой ноутбук и панели располагается.

Использование

  • WxPython-Phoenix (3.0.3.dev1820 + 49a8884)
  • Python 3.4
  • OSX 10.10
+0

Мне не хватает части, где вы на самом деле размещаете панель. Я полагаю, что в вашем окне есть sizer, тогда вы должны добавить панель в sizer. –

+1

Я предполагаю, что родитель панели, созданной вами в load_notebook, не дает места для ноутбука. Или вам нужно добавить эту панель в sizer родителя. Другими словами, нам нужно больше узнать о вашем коде. Хорошим инструментом для отладки таких вопросов, как это, является WIT - http://wiki.wxpython.org/Widget%20Inspection%20Tool – Werner

+0

@Werner Спасибо за этот отзыв. Кадр отображается корректно, но (действительно) дочерний элемент 'panel', который содержит фактический блокнот, закручен - он имеет размер 20x20 пикселей, что является маленькой синей формой, которую я вижу. – MaxQ

ответ

2

Таким образом, после некоторых более тонкой настройки и кончик с помощью Widget Inspection Tool, это был действительно факт, что панель, в которой находился ноутбук, не была рассчитана в соответствии с кадром (при условии, что размер по умолчанию я предполагаю 20x20 пикселей, что является маленьким синим пятном, которое я видел)

Решение было добавить следующее после добавления ноутбука:

sizer_parent = wx.BoxSizer() 
    sizer_parent.Add(panel, 1, wx.ALL | wx.EXPAND, 5) 
    self.SetSizer(sizer_parent) 
    self.Layout() 
0

У меня был точно такой же вопрос, где поле со списком будет идти только в это положение, если окно было изменено, но решение разместил Didn» я работаю для меня. Я получил вокруг него, создавая функцию, которая просто просто изменяет размер окна для вас:

def forceRefresh(self): 
    self.SetSize((self.GetSize().width, self.GetSize().height+1)) 
    self.SetSize((self.GetSize().width, self.GetSize().height-1)) 

Пока не оптимален он получил трюк для меня сделал так, мы надеемся, что это может помочь кому-то еще там.

+0

Часто такие вещи случаются из-за того, что начальный размер родительского окна уже установлен, поэтому событий размера больше нет, пока пользователь не изменит размер окна. При отсутствии событий размера автоматические макеты не запускаются. wx предоставляет метод SendSizeEvent для отправки события искусственного размера, поэтому автомакет может быть переделан в этот момент времени. – RobinDunn

+0

О, хорошо спасибо за подсказку. Я посмотрю, что –

Смежные вопросы