我想保留一个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()
答案 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()