【发布时间】:2015-02-03 18:27:40
【问题描述】:
在 wxPython 中,我无法将我创建的具有固定纵横比的子面板居中。
要控制纵横比,子面板需要捕获 Size 事件,然后执行显式 SetSize。所以,我已经做到了,而且效果很好。不幸的是,当我将此子面板嵌入到另一个面板中时(使用 sizer),wx.ALIGN_CENTER_HORIZONTAL 标志不起作用。
显然,sizer 告诉我的子面板它具有适合的整个宽度。当我的窗口不使用整个宽度时,sizer 不会调整。这是显示问题的代码的简化版本:
import wx
ROWS = 6
COLS = 25
class TestPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1)
label = wx.StaticText(self, -1, 'Label')
grid = TestGrid(self)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(label, 0, flag=wx.ALIGN_CENTER_HORIZONTAL)
sizer.Add(grid, 1, flag=wx.ALIGN_CENTER_HORIZONTAL|wx.EXPAND)
self.SetSizer(sizer)
class TestGrid(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1)
self.SetBackgroundColour(wx.BLUE)
self.Bind(wx.EVT_SIZE, self.OnSize)
def OnSize(self, event):
w, h = self.GetSizeTuple()
delta = min(w // COLS, h // ROWS)
self.SetSize((COLS*delta, ROWS*delta))
self.Refresh()
if __name__ == '__main__':
app = wx.App()
frame = wx.Frame(None, -1, "Test", size=(600, 200))
panel = TestPanel(frame)
frame.Show(True)
app.MainLoop()
这是一个屏幕截图:
【问题讨论】:
标签: python wxpython wxwidgets aspect-ratio