2009-08-18 145 views

回答

5

Sizers不能應用到頂級窗口(爲了定義窗口本身的屬性而不是它們的內容),所以不幸的是沒有「真實」的方式來鎖定寬高比。你最好的辦法是趕上你的窗口的OnSize事件,獲取用戶想要窗口的大小(存儲在wxSizeEvent中),根據縱橫比計算新的寬度和高度,然後立即撥打SetSize新尺寸。

該技術具有視覺假象的調整(操作系統將根據用戶如何拖動它,但然後立即重新繪製你叫SetSize後,導致閃爍效果初步繪製窗口),所以它不是在缺點這不是一個很好的解決方案,但是由於無法將頂級窗口鎖定爲寬高比(並且無需根據SetSize進行調整),因此您必須決定閃爍是否值得。

3

以下是一些示例代碼。閃爍很多,我不確定消除它的好方法。

import wx 

class Frame(wx.Frame): 
    def __init__(self): 
     super(Frame, self).__init__(None, -1, 'Shaped Frame') 
     self.Bind(wx.EVT_SIZE, self.on_size) 
     self.panel = panel = wx.Panel(self, -1) 
     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(panel, 1, wx.SHAPED) 
     self.SetSizer(sizer) 
    def on_size(self, event): 
     event.Skip() 
     self.Layout() 
     self.panel.SetMinSize(self.panel.GetSize()) 
     self.Fit() 

if __name__ == '__main__': 
    app = wx.PySimpleApp() 
    frame = Frame() 
    frame.Show() 
    app.MainLoop() 
+1

我的猜測是消除閃爍是不可能的。 OnSize事件總是在調整大小後開始,這意味着當事件接收後總會導致閃爍(這是一個操作系統限制,而不是wx特定的問題)時調用SetSize。此外,窗口框架(的繪圖和功能)完全由操作系統控制,因此無法「覆蓋」它來嘗試和改變其功能。 – GRB 2009-08-18 14:09:12

相關問題