【问题标题】:wxPython TextCtrl Not Focusing After using Remove() or Clear()wxPython TextCtrl 在使用 Remove() 或 Clear() 后不聚焦
【发布时间】:2013-05-09 10:10:05
【问题描述】:

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

在进行计算之前,我从各种 TextCtrl 收集数据。对于我的储蓄计算器,我有两个 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)

【问题讨论】:

    标签: python wxpython focus


    【解决方案1】:

    这是一个比较老套的解决方案,但它适用于这种情况。发生的情况是,一旦您单击,如果文本为“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()
    

    【讨论】:

    • 我确信 Dziura 不会在意它有多“hacky”。谢谢!
    猜你喜欢
    • 2011-01-13
    • 1970-01-01
    • 2014-09-25
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多