我试图在SetFocus()窗口上使用wxPython。我不确定在Mac上应该是什么样子,但据我所知,当我调用window.SetFocus()和window.HasFocus()返回False时,根本没有视觉上的变化。下面是一些简化的示例代码:
app = wx.App()
frame = wx.Frame(None, -1, '')
box = wx.StaticBox(frame, -1, "")
sizer = wx.StaticBoxSizer(box, orient=wx.HORIZONTAL)
text = wx.StaticText(frame, label="Some Text")
sizer.Add(text, wx.ALIGN_LEFT|wx.ALL, border=10)
main_sizer = wx.BoxSizer(wx.VERTICAL)
main_sizer.Add(sizer)
frame.SetSizer(main_sizer)
frame.Centre()
frame.Show()
text.SetFocus()
print 'text.HasFocus?', text.HasFocus()
app.MainLoop()wxPython版本'2.9.2.4‘和'3.0.2.0’都存在这个问题。有什么想法吗?
编辑:
看起来,StaticText小部件无法接受焦点(window.AcceptFocus())返回False)。在这种情况下,是否有一种简单、被接受的方法来突出这样的窗口?或者,是否有可能改变窗口是否可以接受焦点?
发布于 2015-09-23 08:02:09
因为它是静态文本,可以说没有什么可以接收焦点,因为你不能点击它。
尝试稍微修改一下代码,看看如何设置焦点,并使用event.focus查看焦点中的更改。
import wx
def onFocus(event):
print "widget received focus!"
def onKillFocus(event):
print "widget lost focus!"
app = wx.App()
frame = wx.Frame(None, -1, '')
box = wx.StaticBox(frame, -1, "")
sizer = wx.StaticBoxSizer(box, orient=wx.VERTICAL)
text0 = wx.StaticText(frame,label="1st Item")
text0_input = wx.TextCtrl(frame, wx.ID_ANY, size=(345,25))
text = wx.StaticText(frame, label="Some Text")
text_input = wx.TextCtrl(frame, wx.ID_ANY, size=(345,25))
sizer.Add(text0, wx.ALIGN_LEFT|wx.ALL, border=10)
sizer.Add(text0_input, wx.ALIGN_LEFT|wx.ALL, border=10)
sizer.Add(text, wx.ALIGN_LEFT|wx.ALL, border=10)
sizer.Add(text_input, wx.ALIGN_LEFT|wx.ALL, border=10)
text0_input.Bind(wx.EVT_SET_FOCUS, onFocus)
text0_input.Bind(wx.EVT_KILL_FOCUS, onKillFocus)
main_sizer = wx.BoxSizer(wx.VERTICAL)
main_sizer.Add(sizer)
frame.SetSizer(main_sizer)
frame.Centre()
frame.Show()
text_input.SetFocus()
#print 'text_input.HasFocus?', text_input.HasFocus()
app.MainLoop()发布于 2015-09-23 14:41:29
wx.StaticText小部件不接受焦点。如果您只是试图将您的窗口带到前面,您可能可以使用框架的Raise方法。大多数其他小部件都允许您将焦点放在它们上,这样您就可以编辑它们。
如果要突出显示wx.StaticText小部件中的某些文本,可以尝试更改其背景色。在大多数情况下,这是可行的。
发布于 2015-09-24 09:03:46
回答你在评论中提出的第二个问题。
我不知道你指的是什么,当你说设置背景颜色时,会产生一个非常薄的亮点。
您可以通过启用或禁用按钮来提请注意在任何特定时刻都相关或不相关的按钮。你也可以改变他们的颜色取决于他们是启用,残疾或一时兴起。
例如:
self.button.Disable()
self.button.SetBackgroundColour(wx.NullColour)
self.button.Enable()
self.button.SetBackgroundColour('gold') 设置背景颜色应该改变整个按钮的颜色。
您还可以更改前景色,这将改变任何给定按钮上文本的颜色。
https://stackoverflow.com/questions/32730329
复制相似问题