Python 3.x 使用tkinter将输入从输入小部件打印到文本框

Python 3.x 使用tkinter将输入从输入小部件打印到文本框,python-3.x,tkinter,Python 3.x,Tkinter,您好,我是python新手,正在尝试了解Tkinter。我正在尝试做一个应用程序,你可以输入贷款和投资。该程序中有两个文本框,如果您进行投资或接受贷款,程序将在文本框中打印这些文本框。另一个文本框应显示您的贷款和投资总额,但我有几个问题: 1文本框始终显示最新输入,而不是我输入的总数 2文本框显示我的投资或贷款,但我希望它同时显示我的总贷款和总投资 有人能帮忙吗 将tkinter作为tk导入 root=tk.tk 画布=tk.画布高度=700,宽度=900 帆布包装 frame=tk.Frame

您好,我是python新手,正在尝试了解Tkinter。我正在尝试做一个应用程序,你可以输入贷款和投资。该程序中有两个文本框,如果您进行投资或接受贷款,程序将在文本框中打印这些文本框。另一个文本框应显示您的贷款和投资总额,但我有几个问题:

1文本框始终显示最新输入,而不是我输入的总数

2文本框显示我的投资或贷款,但我希望它同时显示我的总贷款和总投资

有人能帮忙吗

将tkinter作为tk导入 root=tk.tk 画布=tk.画布高度=700,宽度=900 帆布包装 frame=tk.Frameroot,bd=5 frame.placerelx=0.05,rel=0.05,relwidth=0.9,relheight=0.9 button1=tk.Buttonframe,text=Loan,font=fill button2=tk.Buttonframe,text=Investment,font=fill entry1=tk.Entryframe,font=fill entry2=tk.Entryframe,font=fill textbox1=tk.Textframe,font=fill textbox2=tk.Textframe,font=fill 按钮1.placerelx=0.1,rely=0.1,relwidth=0.3,relheight=0.15 按钮2.placerelx=0.1,rely=0.3,relwidth=0.3,relheight=0.15 entry1.placerelx=0.5,rely=0.1,relwidth=0.4,relheight=0.15 entry2.placerelx=0.5,rely=0.3,relwidth=0.4,relheight=0.15 textbox1.placerelx=0.1,rel=0.5,relwidth=0.3975,relheight=0.4 textbox2.placerelx=0.5,rel=0.5,relwidth=0.4,relheight=0.4 def打印机1事件: 贷款=0 已输入\u text=floattk.Entry.getentry1 loan+=输入的\u文本 如果输入文本: textbox1.inserttk.END,获得的新贷款:+strloan+€+\n textbox2.delete1.0,tk.END textbox2.insert1.0,您的贷款总额:+strloan+€+\n 其他: 通过 def打印机2事件: 投资=0 已输入\ u text=floattk.Entry.getentry2 投资+=输入的文本 如果输入文本: textbox1.inserttk.END,投资金额:+striinvestment+€+\n textbox2.delete1.0,tk.END textbox2.insert1.0,您的投资总额:+striinvestment++\n 其他: 通过 按钮1.bind,打印机1 按钮2.bind,打印机2 root.mainloop
我想回答

import tkinter as tk

root = tk.Tk()

canvas = tk.Canvas(height=700, width=900)
canvas.pack()

frame = tk.Frame(root, bd=5)
frame.place(relx=0.05, rely=0.05, relwidth=0.9, relheight=0.9)

button1 = tk.Button(frame, text="Loan", font="fill")
button2 = tk.Button(frame, text="Investment", font="fill")
entry1 = tk.Entry(frame, font="fill")
entry2 = tk.Entry(frame, font="fill")

textbox1 = tk.Text(frame, font="fill")
textbox2 = tk.Text(frame, font="fill")

button1.place(relx=0.1, rely=0.1, relwidth=0.3, relheight=0.15)
button2.place(relx=0.1, rely=0.3, relwidth=0.3, relheight=0.15)
entry1.place(relx=0.5, rely=0.1, relwidth=0.4, relheight=0.15)
entry2.place(relx=0.5, rely=0.3, relwidth=0.4, relheight=0.15)
textbox1.place(relx=0.1, rely=0.5, relwidth=0.3975, relheight=0.4)
textbox2.place(relx=0.5, rely=0.5, relwidth=0.4, relheight=0.4)


history_loans=[]
history_investments=[]


def printer1(event):
    loan = 0
    entered_text = float(tk.Entry.get(entry1))
    loan += entered_text

    history_loans.append(loan)

    if entered_text:
        textbox1.insert(tk.END, "New loan taken: " + str(loan) + " €" + "\n")
        textbox2.delete(1.0, tk.END)

        textbox2.insert(1.0, "Your loan in total: " + str(sum(history_loans)) + " €" + "\n")
        textbox2.insert(1.0, "Your investments in total: " + str(sum(history_investments)) + " €" + "\n")

    else:
        pass

def printer2(event):
    investment = 0
    entered_text = float(tk.Entry.get(entry2))
    investment += entered_text

    history_investments.append(investment)

    if entered_text:
        textbox1.insert(tk.END, "Money invested: " + str(investment) + " €" + "\n")
        textbox2.delete(1.0, tk.END)


        textbox2.insert(1.0, "Your loan in total: " + str(sum(history_loans)) + " €" + "\n")
        textbox2.insert(1.0, "Your investments in total: " + str(sum(history_investments)) + " €" + "\n")    
    else:
        pass

button1.bind("<Button-1>", printer1)
button2.bind("<Button-1>", printer2)

root.mainloop()
我们怎么能有一个历史:看什么。append看什么

如何在两种情况下打印:

textbox2.insert(1.0, "Your loan in total: " + str(sum(history_loans)) + " €" + "\n")
textbox2.insert(1.0, "Your investments in total: " + str(sum(history_investments)) + " €" + "\n")    
变量loan和investment是函数中的局部变量,每次调用函数时都会重置为0。最简单的方法是将它们移到函数外,然后在函数内声明全局:

import tkinter as tk

root = tk.Tk()

...

loan = 0
investment = 0

def printer1(event):
    entered_text = float(tk.Entry.get(entry1))
    global loan
    ...

def printer2(event):
    global investment
    entered_text = float(tk.Entry.get(entry2))
    ...
textbox2.insert(1.0, "Your loan in total: " + str(sum(history_loans)) + " €" + "\n")
textbox2.insert(1.0, "Your investments in total: " + str(sum(history_investments)) + " €" + "\n")    
import tkinter as tk

root = tk.Tk()

...

loan = 0
investment = 0

def printer1(event):
    entered_text = float(tk.Entry.get(entry1))
    global loan
    ...

def printer2(event):
    global investment
    entered_text = float(tk.Entry.get(entry2))
    ...