Python 3.7 + wx Python 4.0.6 (аналогично 4.0.2) + windows 10 (64-разрядная)
Поскольку мне нужен субкадр который может плавать на основном кадре, поэтому используйте стиль: wx.FRAME_FLOAT_ON_PARENT.
Операции: сначала откройте подкадр, затем сверните основной кадр. После восстановления из сворачивания скрыть подкадр (используя Hide ()). Затем сверните-> восстановить снова. Подкадр отображается автоматически и не может быть скрыт. Я проверял, что в это время frame.IsShown () возвращает False.
Пример следующим образом.
import wx
class MainFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, id=-1, parent=parent, size=wx.Size(600, 500),
title='Test')
self.panel = wx.Panel(self, id=-1, pos=(200, 300))
self.button = wx.Button(self.panel, id=-1, label='button',
pos=wx.Point(20, 56), size=wx.Size(87, 28))
self.button.Bind(wx.EVT_BUTTON, self.OnButton, id=-1)
self.frame = MyFrame(self)
def OnButton(self, event):
self.frame.Show()
event.Skip()
class MyFrame(wx.Frame):
def __init__(self, parent):
style = wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | \
wx.MINIMIZE_BOX | wx.FRAME_NO_TASKBAR | wx.FRAME_FLOAT_ON_PARENT
wx.Frame.__init__(self, id=-1, parent=parent, size=wx.Size(300, 200),
title='Sub', style=style)
self.Bind(wx.EVT_CLOSE, self.OnClose)
def OnClose(self, evt):
self.Hide()
if __name__ == '__main__':
app = wx.App()
frame = MainFrame(None)
frame.Show()
app.MainLoop()
Мне не нужно закрывать субкадр. Мне нужно это скрыть.
Подробные операции:
- Нажмите кнопку, чтобы открыть подкадр.
- Нажмите кнопку сворачивания основного кадра. (-> Все кадры свернуты.)
- Нажмите значок на панели задач, чтобы восстановить основной кадр.
- Нажмите кнопку «×» подкадра.
- Снова нажмите кнопку сворачивания основного кадра.
- Нажмите значок на панели задач, чтобы восстановить основной кадр.
-> Проблема: отображается подкадр. И не могу использовать кнопку «×», чтобы скрыть это.
Мне нужен субкадр, показанный на главном кадре, когда он теряет фокус, поэтому я использовал wx.FRAME_FLOAT_ON_PARENT.
Любой совет?