首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >wxwidgets/wxPython:在保持纵横比不变的情况下调整wxFrame大小

wxwidgets/wxPython:在保持纵横比不变的情况下调整wxFrame大小
EN

Stack Overflow用户
提问于 2009-08-18 05:37:21
回答 2查看 6K关注 0票数 2

我有一个只有一个孩子的wx.Frame。在设置孩子的wx.Sizer时,我可以使用wx.SHAPED标志,它使孩子的纵横比保持锁定。但是,框架在其纵横比上仍然是完全自由的,并且会在孩子未使用的区域中留下一个空白。

如何在调整大小时锁定wx.Frame的纵横比?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-18 06:11:34

Sizers不能应用于顶级窗口(为了定义窗口本身的属性,而不是它们的内容),所以不幸的是,没有“真正”的方法来锁定纵横比。最好的办法是捕获窗口的OnSize事件,获取用户想要的窗口大小(存储在wxSizeEvent中),根据纵横比计算新的宽度和高度,然后立即调用具有新大小的SetSize

这种技术的缺点是在调整大小时会产生视觉效果(操作系统最初会根据用户拖动窗口的方式绘制窗口,但在您调用SetSize之后会立即重新绘制窗口,从而导致闪烁效果),因此它不是一个很好的解决方案,但是,由于您无法将顶级窗口锁定为纵横比(并且根本不需要使用SetSize调整窗口大小),因此您必须决定是否值得进行闪烁。

票数 5
EN

Stack Overflow用户

发布于 2009-08-18 12:59:23

下面是一些示例代码。有一个很好的闪烁,我不确定有一个好的方法来消除它。

代码语言:javascript
运行
复制
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()
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1291991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档