Python Tkinter - очищать текстовое поле при каждом нажатии и отображать с разделителем группы цифр - PullRequest
0 голосов
/ 24 сентября 2018

Я пишу простое приложение для расчета некоторых значений в соответствии с введенным пользователем значением.Я почти достиг этого!Теперь я хочу знать:
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 голосов
/ 24 сентября 2018

Решение первого вопроса:

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

As:

>>> "{:,.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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...