wxPython:在向框架添加一个窗口小部件时,窗口小部件定位不正确

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wxPython:在向框架添加一个窗口小部件时,窗口小部件定位不正确相关的知识,希望对你有一定的参考价值。

当我在框架中使用一个按钮并使用坐标定位它时,窗口小部件无法正确显示。它占用整个帧。当我向框架添加另一个按钮时,两个按钮都会正确显示。为什么是这样?

我在Mac OS 10.4,Mac OS 10.12和Windows 10上运行的wxPython上试过这个。每次都显示一个小部件不正确。

# This will display the buttons incorrectly
import wx

app = wx.App()
frame = wx.Frame(None, wx.ID_ANY, "Main Window")
button1 = wx.Button(frame, wx.ID_ANY, "Button 1", (50, 50))
frame.Show()
app.MainLoop()
# This will display the buttons correctly
import wx

app = wx.App()
frame = wx.Frame(None, wx.ID_ANY, "Main Window")
button1 = wx.Button(frame, wx.ID_ANY, "Button 1", (50, 50))
button2 = wx.Button(frame, wx.ID_ANY, "Button 2", (160, 50))
frame.Show()
app.MainLoop()

我希望一个Button示例显示在指定的位置,就像两个按钮示例一样。这是wxPython的错误吗?

答案

将框架视为小部件的包装器。通常一帧将包含一个或多个Panels。 来自文件:if the frame has exactly one child window, not counting the status and toolbar, this child is resized to take the entire frame client area.

A panel is a window on which controls are placed. It is usually placed within a frame. Its main feature over its parent class wx.Window is code for handling child windows and TAB traversal.

panel合并到您的代码中:

import wx
app = wx.App()
frame = wx.Frame(None, wx.ID_ANY, "Window")
panel = wx.Panel(frame,wx.ID_ANY)
button1 = wx.Button(panel, wx.ID_ANY, "Button 1", pos=(50, 50))
frame.Show()
app.MainLoop()

它会表现自己。

enter image description here

以上是关于wxPython:在向框架添加一个窗口小部件时,窗口小部件定位不正确的主要内容,如果未能解决你的问题,请参考以下文章

wxpython 布局管理

删除wxPython小部件之间的填充

php 如何在创世纪2.0框架中添加后窗口小部件区域 - WordPress提示

将自定义小部件添加到 QStackedWidget

更新/刷新动态创建的 WxPython 小部件

父级大小更改时如何更改子窗口小部件的大小?