Пользовательское всплывающее окно WxPython - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь создать собственное окно, которое работает как всплывающее окно и закрывается при потере фокуса (щелкните вне всплывающего окна).

У меня есть рамка с несколькими кликабельными изображениями. Если щелкнуть одно из изображений, появится рамка. Этот фрейм является базовым классом, и его содержимое (элементы управления текстом, сетки, кнопки 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, но у них, очевидно, есть ошибка, которая не позволяет переключать радиокнопки, что делает их бесполезными для меня.

Дайте мне знать, если я не буду иметь смысла, и я постараюсь объяснить лучше.

1 Ответ

0 голосов
/ 21 мая 2019

Используйте wxEVT_ACTIVATE для этой цели (вероятно, wx.EVT_ACTIVATE в wxPython).

Я думаю проблема с переключателями во всплывающих окнах была исправлена ​​в багажнике.

...