所以我正在为我的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)
答案 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()