Python Tkinter-每次单击并使用数字组分隔符显示时,清除一个文本框

时间:2018-09-24 09:57:39

标签: python python-3.x tkinter textbox

我正在编写一个简单的应用程序,以根据用户输入的值来计算一些值。我快完成了! 现在我想知道:
1.每次单击如何清除txtFixedIncome文本框?
2.如何实现以{千位分隔符(数字组分隔符)显示txtFixedIncome文本框的内容?即将27659显示为27,659

import tkinter
mainForm = tkinter.Tk()
mainForm.title('Shahr Fixed Income Fund')
def btnCalculatePressed():
    txtCalculationResult.delete('1.0', 'end')
    #txtCalculationResult.insert(tkinter.INSERT, "Button was pressed")
    #txtCalculationResult.pack()
    yourIncomePortion = txtFixedIncome.get('1.0', 'end')
    print(yourIncomePortion)
    txtCalculationResult.insert(tkinter.INSERT, yourIncomePortion)
btnCalculate = tkinter.Button(mainForm , text = "Calculate", command= btnCalculatePressed)
txtCalculationResult = tkinter.Text(mainForm )
txtCalculationResult.insert(tkinter.INSERT, "CalculationResults")
txtFixedIncome = tkinter.Text(mainForm, height = 1, width = 30 )
txtFixedIncome.insert(tkinter.INSERT, "your income portion")

txtFixedIncome.pack();
txtCalculationResult.pack()
btnCalculate.pack() 

mainForm.mainloop()

1 个答案:

答案 0 :(得分:1)

第一个问题的解决方案:

bind聚焦和聚焦小部件。喜欢:

txtFixedIncome.bind("<FocusIn>",lambda _:txtFixedIncome.delete('1.0', 'end'))
txtFixedIncome.bind("<FocusOut>",lambda _:txtFixedIncome.insert("1.0","your income portion" if str(txtFixedIncome.get("1.0","end")) == "\n" else ""))

这将在聚焦时清除输入的所有数据,并在聚焦时输入信息数据。


第二个问题的解决方案:

您可以创建一个函数来更新您的值并将其格式化为:

def updat(text):
    try:txtCalculationResult.insert(tkinter.INSERT,"{:,.0f}".format(float(text)))
    except:txtCalculationResult.insert(tkinter.INSERT,"CalculationResults")

为:

>>> "{:,.0f}".format(23442)
'23,442'
>>> 

完整代码:

以下是完整的示例代码,显示了您期望的行为:

import tkinter
mainForm = tkinter.Tk()
mainForm.title('Shahr Fixed Income Fund')
def updat(text):
    try:txtCalculationResult.insert(tkinter.INSERT,"{:,.0f}".format(float(text)))
    except:txtCalculationResult.insert(tkinter.INSERT,"CalculationResults")
def btnCalculatePressed():
    txtCalculationResult.delete('1.0', 'end')
    yourIncomePortion = txtFixedIncome.get('1.0', 'end')
    updat(yourIncomePortion)
btnCalculate = tkinter.Button(mainForm , text = "Calculate", command= btnCalculatePressed)
txtCalculationResult = tkinter.Text(mainForm)
txtCalculationResult.insert(tkinter.INSERT, "CalculationResults")
txtFixedIncome = tkinter.Text(mainForm, height = 1, width = 30 )
txtFixedIncome.insert(tkinter.INSERT, "your income portion")

txtFixedIncome.bind("<FocusIn>",lambda _:txtFixedIncome.delete('1.0', 'end'))
txtFixedIncome.bind("<FocusOut>",lambda _:txtFixedIncome.insert("1.0","your income portion" if str(txtFixedIncome.get("1.0","end")) == "\n" else ""))

txtFixedIncome.pack();
txtCalculationResult.pack()
btnCalculate.pack() 

mainForm.mainloop()

键入时设置格式:

如果要在键入时按注释格式设置字符串,请使用以下代码:

import tkinter
mainForm = tkinter.Tk()
mainForm.title('Shahr Fixed Income Fund')
def updat(text):
    try:txtCalculationResult.insert(tkinter.INSERT,"{:,.0f}".format(float(text.replace(",",""))))
    except:txtCalculationResult.insert(tkinter.INSERT,"CalculationResults")
def btnCalculatePressed():
    txtCalculationResult.delete('1.0', 'end')
    yourIncomePortion = txtFixedIncome.get('1.0', 'end')
    updat(yourIncomePortion)
btnCalculate = tkinter.Button(mainForm , text = "Calculate", command= btnCalculatePressed)
txtCalculationResult = tkinter.Text(mainForm)
txtCalculationResult.insert(tkinter.INSERT, "CalculationResults")
txtFixedIncome = tkinter.Text(mainForm, height = 1, width = 30 )
txtFixedIncome.insert(tkinter.INSERT, "your income portion")
def updat2():
    text = txtFixedIncome.get("1.0","end")
    txtFixedIncome.delete("1.0","end")
    try:
        txtFixedIncome.insert(tkinter.INSERT,"{:,.0f}".format(float(text.replace(",",""))))
    except:
        txtFixedIncome.insert(tkinter.INSERT,text[:-1])
txtFixedIncome.bind("<FocusIn>",lambda _:txtFixedIncome.delete('1.0', 'end'))
txtFixedIncome.bind("<FocusOut>",lambda _:txtFixedIncome.insert("1.0","your income portion" if str(txtFixedIncome.get("1.0","end")) == "\n" else ""))
txtFixedIncome.bind("<Key>",lambda _:mainForm.after(50,updat2))

txtFixedIncome.pack();
txtCalculationResult.pack()
btnCalculate.pack() 

mainForm.mainloop()