我正在编写一个类来左键单击任务栏图标生成一个框架。所需的行为是在失去焦点时此帧消失,因此我将wx.EVT_KILL_FOCUS
事件绑定到LeftClickFrame()
对象中的面板。
如果框架中只有wx.StaticText
窗口小部件,则效果正常,但如果我添加wx.HyperlinkCtrl
,则wx.EVT_KILL_FOCUS
事件不再触发。我使用wx.RadioButton
小部件获得相同的阻止行为,但不会使用wx.StaticBitmap
。
我认为这与wx.HyperlinkCtrl
和wx.RadioButton
窗口小部件都是控件和发出命令事件这一事实有关,但我不清楚我必须做些什么才能重新安排我的课程因此,当存在这些控件中的一个或两个时,仍会处理wx.EVT_KILL_FOCUS
事件。
我有以下代码:
class LeftClickFrame(wx.Frame):
def __init__(self, frame):
super(LeftClickFrame, self).__init__(frame,
style=wx.FRAME_NO_TASKBAR|
wx.CAPTION)
self.tbicon = frame.taskbar_icon
self.tbicon.options_window = self
self.InitUI()
def InitUI(self):
self.panel = wx.Panel(self, wx.ID_ANY)
self.panel.Bind(wx.EVT_KILL_FOCUS, self.Close)
self.main_vbox = wx.BoxSizer(wx.VERTICAL)
statuses_hbox = self.GetStatusesVBox()
self.main_vbox.Add(statuses_hbox)
self.main_vbox.Add((-1, 10))
links_vbox = self.GetLinksVBox()
self.main_vbox.Add(links_vbox, flag=wx.TOP|wx.CENTER, border=20)
self.panel.SetSizer(self.main_vbox)
def GetStatusesVBox(self, statuses):
statuses_vbox = wx.BoxSizer(wx.VERTICAL)
for status in statuses:
battery_statuses_txt = wx.StaticText(self.panel,
wx.ID_ANY, status)
statuses_vbox.Add(battery_statuses_txt,
flag=wx.TOP|wx.LEFT, border=10)
return statuses_vbox
def GetLinksVBox(self):
links_vbox = wx.BoxSizer(wx.VERTICAL)
link1 = wx.HyperlinkCtrl(self.panel, wx.ID_ANY, 'Adjust screen brightness')
link1.Bind(wx.EVT_HYPERLINK, self.tbicon.LaunchPowerOptions)
links_vbox.Add(link1, flag=wx.CENTER|wx.TOP, border=5)
return links_vbox
def Close(self):
self.tbicon.options_window.Destroy()
self.Destroy()
答案 0 :(得分:2)
您可以尝试EVT_ACTIVATE而不是EVT_KILL_FOCUS,因为它在您的情况下不起作用。 您可以使用event.GetActive()来检查此帧是否处于焦点。
def InitUI(self):
self.panel = wx.Panel(self, wx.ID_ANY)
self.Bind(wx.EVT_ACTIVATE, self.Close) #bind it to Frame
def Close(self, evt):
if evt.GetActive() != True:
#do window close