Я пытаюсь создать собственное окно, которое работает как всплывающее окно и закрывается при потере фокуса (щелкните вне всплывающего окна).
У меня есть рамка с несколькими кликабельными изображениями. Если щелкнуть одно из изображений, появится рамка. Этот фрейм является базовым классом, и его содержимое (элементы управления текстом, сетки, кнопки e.t.c) заменяются в зависимости от того, какое изображение вы щелкнули. Моя проблема в том, где и какое событие мне нужно запечатлеть.
Я попытаюсь упростить пример / псевдокод.
class MainFrame(MainFrameDefinition):
# unimportant code
custom_frame_holder = CustomFrame()
for child_panel in self.lots_of_panels:
# add a panel to a map and set
custom_frame_holder.panel = child_panel
class CustomFrame(wx.Frame):
def __init__(self, parent):
# unimportant code
self.panel = # a panel that changes
self.Bind(wx.EVT_KILL_FOCUS, self.lost_focus)
def lost_focus(self, event):
self.Hide()
Так в чем же проблема офицера? Хорошо, как только я нажимаю на элемент управления в CustomFrame, рамка теряет фокус и окно скрывается.
Я попытался перехватить EVT_CHILD_FOCUS, а затем снова установить фокус на рамку, но затем, поскольку рамка имеет фокус, я не могу написать, скажем, текстовый элемент управления.
Я посмотрел на wxPopup и wxTransientPopup, но у них, очевидно, есть ошибка, которая не позволяет переключать радиокнопки, что делает их бесполезными для меня.
Дайте мне знать, если я не буду иметь смысла, и я постараюсь объяснить лучше.