четверг, 7 октября 2010 г.

Подводный камень позиционирования окон в wxPython

Представим себе окно (wx.Frame), которое нужно разместить на екране согласно некторому алгоритму, например, отцентрировать. Что мы делаем?

class MyFrame(wx.Frame):
...
def __init__(self):
...
ds = wx.DisplaySize()
self.SetPosition((ds[0] / 2 - self.Size[0] / 2,
ds[1] / 2 - self.Size[1] / 2))
...

Предположим, что метод __init__ содержит еще массу программного кода дял инициализации окна. В таком случае, логично предположить, что вышеописанная операция должна быть описана после всех манипуляций с размерами окна.

Часто такие операции происходят неявно, и, следственно, окно позиционируется совершенно неправильно, и об этом следует всегда помнить. Примером такой неявной смены размеров окна может быть, скажем установка сайзера (wx.Sizer):

self.SetSizer(self.main_sizer)
self.Fit()

В этом случае окно "подтянет" свои размеры под сайзер и, соответственно, позиционирование пройдет неправильно.

Комментариев нет:

Отправить комментарий

В этом гаджете обнаружена ошибка