wxPython TextCtrl使用Remove()或Clear()后不聚焦

时间:2013-05-09 10:10:05

标签: python focus wxpython clear

所以我正在为我的HSC制作我的重大项目,其中包括三个银行计算器。

在进行计算之前,我从各种TextCtrls中收集数据。对于我的储蓄计算器,我有两个TextCtrls,一个是多年,一个是几个月。为了使程序更直观,我希望相应的TextCtrl的值表示'年'或'月'而不是我的静态文本说'储蓄期限(年 - 月)。

但是,单击TextCtrl后,它会清除该框的内容,但在第一次单击后我无法再次对焦框。即使值为空白,清除功能仍然继续运行,重新聚焦的唯一方法是通过Tab键到场。代码片段如下:

self.SavingLabel4 = wx.StaticText(self.Savings_Pane, -1, "          Savings Term (Years - Months)")
self.Savings_TermYears = wx.TextCtrl(self.Savings_Pane, -1, "Years")
self.Savings_TermYears.Bind(wx.EVT_LEFT_DOWN, self.ClearText123)

def ClearText123(self, event):
    print self.Savings_TermYears.GetValue()     # print the value of the text control
    if self.Savings_TermYears.GetValue != '':    # if the control isn't blank, clear it
        self.Savings_TermYears.Clear()
        print 'Cleared'                        # outputs that the clear function was used (just for testing)

1 个答案:

答案 0 :(得分:1)

这是一个相对hacky的解决方案,但它适用于这种情况。发生的是,一旦你点击,如果文本是“年”,那么它清除整个TextCtrl,然后重新获得焦点,最后从TextCtrl取消绑定点击事件(因为不再需要):

def ClearText123(self, event):
    if self.Savings_TermYears.GetValue() == 'Years': # if the control isn't blank, clear it
        self.Savings_TermYears.Clear()
        self.Savings_TermYears.Unbind(wx.EVT_LEFT_DOWN)
    self.Savings_TermYears.SetFocus()