首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >wxPython SetFocus()不工作

wxPython SetFocus()不工作
EN

Stack Overflow用户
提问于 2015-09-23 03:10:10
回答 3查看 2.4K关注 0票数 0

我试图在SetFocus()窗口上使用wxPython。我不确定在Mac上应该是什么样子,但据我所知,当我调用window.SetFocus()和window.HasFocus()返回False时,根本没有视觉上的变化。下面是一些简化的示例代码:

代码语言:javascript
复制
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)。在这种情况下,是否有一种简单、被接受的方法来突出这样的窗口?或者,是否有可能改变窗口是否可以接受焦点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-23 08:02:09

因为它是静态文本,可以说没有什么可以接收焦点,因为你不能点击它。

尝试稍微修改一下代码,看看如何设置焦点,并使用event.focus查看焦点中的更改。

代码语言:javascript
复制
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()
票数 1
EN

Stack Overflow用户

发布于 2015-09-23 14:41:29

wx.StaticText小部件不接受焦点。如果您只是试图将您的窗口带到前面,您可能可以使用框架的Raise方法。大多数其他小部件都允许您将焦点放在它们上,这样您就可以编辑它们。

如果要突出显示wx.StaticText小部件中的某些文本,可以尝试更改其背景色。在大多数情况下,这是可行的。

票数 0
EN

Stack Overflow用户

发布于 2015-09-24 09:03:46

回答你在评论中提出的第二个问题。

我不知道你指的是什么,当你说设置背景颜色时,会产生一个非常薄的亮点。

您可以通过启用或禁用按钮来提请注意在任何特定时刻都相关或不相关的按钮。你也可以改变他们的颜色取决于他们是启用,残疾或一时兴起。

例如:

代码语言:javascript
复制
        self.button.Disable()
        self.button.SetBackgroundColour(wx.NullColour)

        self.button.Enable()
        self.button.SetBackgroundColour('gold')    

设置背景颜色应该改变整个按钮的颜色。

您还可以更改前景色,这将改变任何给定按钮上文本的颜色。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32730329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档