【问题标题】:wxPython: what is preventing me from making a window smaller?wxPython:是什么阻止我让窗口变小?
【发布时间】:2014-10-10 01:54:51
【问题描述】:

我继承了一个 wxPython 应用程序(我最近的生活故事),您无法将窗口缩小(但您可以将其放大)。是什么阻止了它的尺寸变小?我可以用什么来查找导致这种情况的原因?该窗口包含一个带有 2 个选项卡的笔记本。一个选项卡有一个网格,另一个有一个面板和 3 个网格。

【问题讨论】:

    标签: wxpython wxwidgets


    【解决方案1】:

    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.
    

    【讨论】:

    • 不,在代码中的任何地方都没有出现 SetSizeHints。
    【解决方案2】:

    这可能是为您的 Dialog/Frame 调用 SetMinSize。

    【讨论】:

    • 不,我的代码中没有任何地方出现 SetMinSize。
    • 嗯,然后我会查看 'size=(x, y)' 的定义,然后我注意到另一个问题,GridBagSizer 的使用似乎也可以做到这一点。
    • 如果没有硬编码尺寸,那么我会在网格上提示。那么,如何将三个网格放到 ScrolledPanel 而不是 Panel 上。
    • 所以有一些硬编码的 'size=(x, y)' 定义。我删除了这些,现在窗口可以垂直调整大小,但不能水平调整。而且它现在是全屏显示,而之前不是。
    • 不明白,但全屏可能是由于调用 frame.Maximize() 或 frame.Iconize(False),但不知道为什么之前没有效果。
    【解决方案3】:

    某些元素可能已设置大小。为窗口正确设置大小调整器,而不使用隐式窗口大小调整器,将不允许您将窗口大小更改为小于设置大小的元素所需的大小。见例子:

    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。

    【讨论】:

    • 这可以解释为什么我不能水平调整它的大小。但不是为什么它会全屏显示。
    • 在代码明确设置窗口大小之前,我无法在任何方向调整它的大小。我删除了窗口大小的显式设置,然后它全屏显示,我可以垂直调整它但不能水平调整。
    【解决方案4】:

    那么,我假设代码正在处理调整大小事件,允许您将窗口变大,但不能变小。

    寻找类似void handlerFuncName(wxSizeEvent& event)的东西

    同时寻找 wxEVT_SIZE

    【讨论】:

    • 不,其中任何一个都没有出现。
    猜你喜欢
    • 2011-04-04
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2020-11-19
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多