1

それで、私は 3 つの銀行電卓で構成される HSC の主要プロジェクトを作成しています。

計算を行う前に、さまざまな TextCtrls からデータを収集します。私の貯蓄電卓には、2 つの TextCtrls があり、1 つは年用、もう 1 つは月用です。プログラムをより直感的にするために、それぞれの TextCtrl の値を、'Savings Term (Years - Months)' という StaticText ではなく、'Years' または 'Months' にしたいと考えています。

ただし、TextCtrl をクリックすると、ボックスの内容がクリアされますが、最初のクリック後にボックスに再び集中することはできません。値が空白であってもクリア機能は引き続き実行され、再度フォーカスする唯一の方法はタブでフィールドに移動することです。コードのスニペットは次のとおりです。

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

これは比較的ハックなソリューションですが、この場合はうまくいきます。クリックすると、テキストが「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 に答える