wxPython: виджет расположен неправильно при добавлении одного виджета во фрейм - PullRequest
0 голосов
/ 21 апреля 2019

Когда я использую одну кнопку в кадре и позиционирую ее с использованием координат, виджет отображается неправильно. Это занимает весь кадр. Когда я добавляю еще одну кнопку в рамку, обе кнопки отображаются правильно. Почему это?

Я пробовал это на wxPython, работающем в Mac OS 10.4, Mac OS 10.12 и Windows 10. Отображение одного виджета выполняется неправильно каждый раз.

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

Я ожидаю, что пример с одной кнопкой будет отображаться в указанном месте, как пример с двумя кнопками. Это ошибка с wxPython?

1 Ответ

1 голос
/ 22 апреля 2019

Думайте о фрейме как обёртке для ваших виджетов.Обычно фрейм содержит один или несколько 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

...