2

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

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()
4

1 回答 1

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()
于 2013-01-16T20:33:53.400 回答