1

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

在进行计算之前,我从各种 TextCtrls 中收集数据。对于我的储蓄计算器,我有两个 TextCtrl,一个用于数年,一个用于数月。为了使程序更直观,我希望各自的 TextCtrl 值说“年”或“月”,而不是我的 StaticText 说“储蓄期限(年 - 月)”。

但是,单击 TextCtrl 后,它会清除该框的内容,但在第一次单击后我无法再次关注该框。即使值为空白,clear 函数仍会继续运行,并且重新聚焦的唯一方法是通过 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)
4

1 回答 1

1

这是一个相对 hacky 的解决方案,但它适用于这种情况。发生的情况是,一旦您单击,如果文本为“Years”,则它会清除整个 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()
于 2013-05-09T10:30:16.713 回答