强制面板在wx(python)中为正方形

时间:2012-05-06 06:27:53

标签: python wxpython panel wxwidgets

有没有人知道如何强迫小组变成正方形。

出现这种情况的情况是有一个面板,其中我有一个带有2个插槽的水平BoxSizer,在左侧插槽中我有一个面板,我将通过wx.PaintDC绘制,右边我要去有一个列表控件或一些其他小部件。

我想要实现的目标是让窗口可以实现,让左侧面板始终保持正方形,并让右手内容填充剩下的空间。

2 个答案:

答案 0 :(得分:2)

其中一个解决方案是使用EVT_SIZE响应窗口大小调整并更新事件函数中的面板大小。简单示例代码:

import wx
from wx.lib.mixins.inspection import InspectionMixin

class MyApp(wx.App, InspectionMixin):
    def OnInit(self):
        self.Init()  # initialize the inspection tool
        frame = wx.Frame(None)
        sizer = wx.BoxSizer(wx.HORIZONTAL)
        frame.SetSizer(sizer)

        self.__squarePanel = wx.Panel(frame)
        sizer.Add(self.__squarePanel, 0, wx.ALL | wx.EXPAND, 5)

        frame.Bind(wx.EVT_SIZE, self.OnSize)

        frame.Show()
        self.SetTopWindow(frame)
        return True  

    def OnSize(self, evt):
        frame = evt.GetEventObject()
        frameW, frameH = frame.GetSize()
        targetSide = min(frameW, frameH)
        self.__squarePanel.SetSize((targetSide, targetSide))


app = MyApp()
app.MainLoop()

答案 1 :(得分:1)

您可以绑定到wx.EVT_SIZE以在调整窗口大小时调整面板大小。部分代码(未经测试,但有点像这样):

self.panel = wx.Panel(self, -1, size=(200, 200))
self.Bind(wx.EVT_SIZE, self.resize_panel)

def resize_panel():
    w, h = self.sizer.GetSize()
    w = h
    panel.SetSize(w, h)