有谁知道我将如何强制面板成为方形。
发生这种情况的情况是有一个面板,其中我有一个带有 2 个插槽的水平 BoxSizer,在左侧插槽中我有一个面板,我将通过 wx.PaintDC 进行绘制,在右侧我将有一个列表控件或其他一些小部件。
我想要实现的是使窗口可实现并让左侧面板始终保持方形,并让右手内容填充其余空间。
其中一种解决方案是在事件函数中使用 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()
您可以绑定到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)