首页 > 解决方案 > Python Tkinter-每次单击时清除文本框并使用数字组分隔符显示

问题描述

我正在编写一个简单的应用程序来根据用户输入的值计算一些值。我几乎做到了!现在我想知道: 1.每次点击
我的文本框如何清除? 2、如何实现以千位分隔符(数字组分隔符)显示文本框的内容?即显示为.txtFixedIncome
txtFixedIncome2765927,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()

标签: pythonpython-3.xtkintertextbox

解决方案


第一个问题的解答:

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()

推荐阅读