2012-05-06 58 views
1

有沒有人知道我會如何強制面板變成方形。強迫一個面板在wx(python)中爲正方形

發生這種情況有一個面板,其中我有一個水平BoxSizer與2個插槽,在左側插槽我有一個面板,我將要繪製到雖然wx.PaintDC,在右邊我將有一個列表控件或其他小部件。

我想要實現的是讓窗口可以實現,並讓左側面板始終保持正方形,並讓右側內容填充剩餘空間。

回答

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() 
+0

這是一個非常神的答案,正在對大部分除了在右側窗格中沒有與左窗格下元素滑動自動調整大小,我會在調整右側面板中一展身手在同一個事件中,你有任何其他建議嗎? – Hugoagogo

+0

我決定採取不同的路線,因爲您提供了一個很好的起點,我正在爲您的答案寫上正確答案 – Hugoagogo

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)