tamanegiの日記: wxPython: FlexGridSizer続き
一応EVT_SIZEに対応できるようになった。…が、何か間違ってる気がする。
一応備忘録として疑似コードとコメントを残しておくことにする。
ちなXRC使ってることは前提。
# FlexGridSizer の親 Window の EVT_SIZE のハンドラ
def OnResize( self, event = None ):
obj = xrc.XRCCTRL( self.mainframe, "obj" )
objsize = obj.GetSize()
# GetSize() をするだけだと border の幅とかわからんのでSizerItem のサイズも
sizer = obj.GetContainingSizer()
sizeritem = sizer.GetItem( obj )
objsize_wb = sizeritem.GetSize()
# border size; 他に良い方法はないのだろうか
border = objsize_wb - objsize
# 現在のウインドウサイズ; MenuBar とかの領域を考慮するため GetClientSize
window_size = self.mainframe.GetClientSize()
# sizeritem のサイズ設定(ここが極めて微妙。なぜ border を考慮する必要あるのか)
# border 幅が複数あるだけでも破綻しそう
# ちなこれを変えずに Layout しても無駄っぽい
objsize_wb_new = window_size - border
sizeritem.SetMinSize( objsize_wb_new )
# obj のサイズ設定; これは多分普通…?
objsize_new = window_size - border
obj.SetSize( objsize_new )
# update layout
sizer.Layout()
段々わかるようになってきた気がしないでもないけど、
逆に益々わからなくなってきたような気もしないでもない。
wxPython: FlexGridSizer続き More ログイン