【问题标题】:Force a panel to be square in wx (python)强制面板在 wx 中为正方形(python)
【发布时间】:2012-05-06 06:27:52
【问题描述】:

有人知道我将如何强制面板为方形。

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

我想要实现的是使窗口可实现并让左侧面板始终保持方形,并让右侧内容填充其余空间。

【问题讨论】:

    标签: python wxpython panel wxwidgets


    【解决方案1】:

    其中一种解决方案是在事件函数中使用 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()
    

    【讨论】:

    • 这是一个非常棒的答案,除了右侧窗格没有自动调整大小,左窗格在元素下滑动,我将尝试调整右侧面板的大小同样的活动,您还有其他建议吗?
    • 我决定走一条不同的路,因为你提供了一个很好的起点,我正在标记你的正确答案
    【解决方案2】:

    您可以绑定到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)
    

    【讨论】:

      猜你喜欢
      • 2018-02-02
      • 1970-01-01
      • 2014-02-15
      • 2016-02-27
      • 2014-12-26
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      相关资源
      最近更新 更多