wxPython保持wx.Frame方块?

时间:2013-01-15 23:54:30

标签: wxpython

我想保留一个Frame square(像棋盘)。它可以调整大小。这是我试过的。它保持框架正方形,但不会减小尺寸。它只会增加尺寸。

import wx

class MainWindow (wx.Frame):
    def __init__ (self):
        wx.Frame.__init__(self, None)
        self.Bind(wx.EVT_SIZE, self.OnSize)
        self.Show()

    def OnSize (self, event):
        w,h = self.GetClientSize()
        size = max(w,h)
        self.SetClientSize((size,size))

if __name__ == '__main__':
    app = wx.PySimpleApp()
    win = MainWindow()
    app.MainLoop()

1 个答案:

答案 0 :(得分:1)

(根据RobinDunn建议的评论复制)

问题是max(w, h)将始终返回最大数字。因此,如果要逐渐减小水平尺寸,垂直尺寸将覆盖水平尺寸。理想情况下,您可能想知道OnSize中发生了哪些变化,因此您可以推断出用户意图是什么(增加或减少),并相应地使用min/max。一个想法是将先前的大小存储在帧上,因此您可以比较新的和以前的大小。

这个想法类似于下面的代码。请注意,它的边缘仍然很粗糙,但是  它应该给你一个起点。

import wx


class MainWindow(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None)
        self._size = self.ClientSize
        self.Bind(wx.EVT_SIZE, self.OnSize)
        self.Show()

    def OnSize(self, event):
        if self._size[0] != self.ClientSize[0]:
            self._size = self.ClientSize[0], self.ClientSize[0]
        elif self._size[1] != self.ClientSize[1]:
            self._size = self.ClientSize[1], self.ClientSize[1]

        if self._size != self.ClientSize:
            self.ClientSize = self._size


if __name__ == '__main__':
    app = wx.PySimpleApp()
    win = MainWindow()
    app.MainLoop()