【发布时间】:2014-10-10 01:54:51
【问题描述】:
我继承了一个 wxPython 应用程序(我最近的生活故事),您无法将窗口缩小(但您可以将其放大)。是什么阻止了它的尺寸变小?我可以用什么来查找导致这种情况的原因?该窗口包含一个带有 2 个选项卡的笔记本。一个选项卡有一个网格,另一个有一个面板和 3 个网格。
【问题讨论】:
我继承了一个 wxPython 应用程序(我最近的生活故事),您无法将窗口缩小(但您可以将其放大)。是什么阻止了它的尺寸变小?我可以用什么来查找导致这种情况的原因?该窗口包含一个带有 2 个选项卡的笔记本。一个选项卡有一个网格,另一个有一个面板和 3 个网格。
【问题讨论】:
http://docs.wxwidgets.org/trunk/classwx_top_level_window.html#ac01a45e5d82e4e3be22a4841c1217e11
virtual void wxTopLevelWindow::SetSizeHints ( int minW,
int minH,
int maxW = -1,
int maxH = -1,
int incW = -1,
int incH = -1
)
virtual
Allows specification of minimum and maximum window sizes, and window size increments.
If a pair of values is not set (or set to -1), no constraints will be used.
Parameters
minW The minimum width.
minH The minimum height.
maxW The maximum width.
maxH The maximum height.
incW Specifies the increment for sizing the width (GTK/Motif/Xt only).
incH Specifies the increment for sizing the height (GTK/Motif/Xt only).
Remarks
Notice that this function not only prevents the user from resizing the window outside the given bounds but it also prevents the program itself from doing it using wxWindow::SetSize().
Reimplemented from wxWindow.
【讨论】:
这可能是为您的 Dialog/Frame 调用 SetMinSize。
【讨论】:
某些元素可能已设置大小。为窗口正确设置大小调整器,而不使用隐式窗口大小调整器,将不允许您将窗口大小更改为小于设置大小的元素所需的大小。见例子:
import wx
class MainWindow(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
self.panel = wx.Panel(self)
self.button = wx.Button(self.panel, label="Test", size=(200, 200))
self.windowSizer = wx.BoxSizer()
self.windowSizer.Add(self.panel, 1, wx.ALL | wx.EXPAND)
self.sizer = wx.BoxSizer()
self.sizer.Add(self.button)
self.border = wx.BoxSizer()
self.border.Add(self.sizer, 1, wx.ALL | wx.EXPAND, 5)
self.panel.SetSizerAndFit(self.border)
self.SetSizerAndFit(self.windowSizer)
self.Show()
app = wx.App(False)
win = MainWindow(None)
app.MainLoop()
无法调整窗口大小,因此它会强制按钮小于 200x200。
【讨论】:
那么,我假设代码正在处理调整大小事件,允许您将窗口变大,但不能变小。
寻找类似void handlerFuncName(wxSizeEvent& event)的东西
同时寻找 wxEVT_SIZE
【讨论】: