#widget #position #wxpython
#виджет #позиция #wxpython
Вопрос:
Когда я использую одну кнопку во фрейме и позиционирую ее с помощью координат, виджет отображается некорректно. Он занимает весь фрейм. Когда я добавляю еще одну кнопку в фрейм, обе кнопки отображаются правильно. Почему это так?
Я пробовал это на 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:
Думайте о фрейме как обертке для ваших виджетов. Обычно фрейм будет содержать один или несколько 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.
Включите a 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()
и он будет вести себя сам по себе.
Комментарии:
1. Большое вам спасибо! Вы ответили на мой вопрос. Вот документация, из которой была взята цитата: proton-ce.sourceforge.net/rc/wxwidgets/docs/html/wx /…