2009-08-18 147 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

相关问题