繁体   English   中英

如何在Tkinter中将值打印到标签中

[英]How to print values into a Label in Tkinter

我想写一个小程序,计算净额和税额。 我写了这段代码,并根据这篇文章尝试使用var.set()多次,但我不知道如何正确执行。

from tkinter import *
import tkinter as tk

def count23():
    b = gross.get()
    n = round(b/1.23, 2)
    v = round(b - n, 2)
    # print here works, but prints in shell 

def count8():
    b = gross.get()
    n = round(b/1.08, 2)
    v = round(b - n, 2)

def count5():
    b = gross.get()
    n = round(b/1.05, 2)
    v = round(b - n, 2)

root = tk.Tk()

gross = DoubleVar()
root.geometry('220x200+250+250')

L1 = Label(root, text='Input gross ammount').grid(row=0, column=0, columnspan=5)

E1 = Entry(root, textvariable=gross).grid(row=1, column=1, columnspan=3, sticky='WE', padx=5, pady=5)

L2 = Label(root, text='Choose your tax rate').grid(row=2, column=0, columnspan=5)

B1 = Button(root, text='5 %', command=count5)
B1.grid(row=3, column=0, padx=5, pady=5)

B2 = Button(root, text='8 %', command=count8)
B2.grid(row=3, column=2, padx=5, pady=5)

B3 = Button(root, text='23 %', command=count23)
B3.grid(row=3, column=4, padx=5, pady=5)

L3 = Label(root, text=' ').grid(row=4, column=0, columnspan=5)

L4 = Label(root, text='Net').grid(row=5, column=0, columnspan=2, sticky='WE')

L5 = Label(root, text='TAX').grid(row=5, column=3, columnspan=2, sticky='WE')

L6 = Label(root, relief='raised')
L6.grid(row=6, column=0, columnspan=2, sticky='WE')

L7 = Label(root, relief='raised')
L7.grid(row=6, column=3, columnspan=2, sticky='WE')

root.mainloop()

我需要在L6和L7标签上打印净额和税额。 请给我一些线索。

执行此操作的简单方法是为这些标签提供自己的textvariable s。

我用一个函数show_tax替换了您的3个count函数。 我们在每个Button命令中使用lambda函数,以所需的税率调用show_tax 我还做了其他一些小的更改。

import tkinter as tk

def show_tax(rate):
    b = gross.get()
    n = round(b / rate, 2)
    # Format to string with 2 digits after the decimal point
    net.set(format(n, '.2f'))
    t = round(b - n, 2)
    tax.set(format(t, '.2f'))

root = tk.Tk()
root.geometry('310x165+250+250')
root.title('Tax calculator')

gross = tk.DoubleVar()
net = tk.StringVar()
tax = tk.StringVar()

tk.Label(root, text='Input gross amount').grid(row=0, column=0, columnspan=5)

e = tk.Entry(root, textvariable=gross)
e.grid(row=1, column=1, columnspan=3, sticky='WE', padx=5, pady=5)

tk.Label(root, text='Choose your tax rate').grid(row=2, column=0, columnspan=5)

b = tk.Button(root, text='5 %', command=lambda r=1.05: show_tax(r))
b.grid(row=3, column=0, padx=5, pady=5)

b = tk.Button(root, text='8 %', command=lambda r=1.08: show_tax(r))
b.grid(row=3, column=2, padx=5, pady=5)

b = tk.Button(root, text='23 %', command=lambda r=1.23: show_tax(r))
b.grid(row=3, column=4, padx=5, pady=5)

# An empty Label to force row to be displayed
tk.Label(root).grid(row=4, column=0, columnspan=5)

tk.Label(root, text='Net').grid(row=5, column=0, columnspan=2, sticky='WE')
tk.Label(root, text='TAX').grid(row=5, column=3, columnspan=2, sticky='WE')

l = tk.Label(root, textvariable=net, relief='raised')
l.grid(row=6, column=0, columnspan=2, sticky='WE')

l = tk.Label(root, textvariable=tax, relief='raised')
l.grid(row=6, column=3, columnspan=2, sticky='WE')

root.mainloop()

我对您的代码还有其他注释(以及对它的更改)。

from tkinter import *使用它不是一个好主意,因为它将大约130个Tkinter名称导入到全局名称空间中,这很杂乱,并可能导致名称冲突。 使用显式tk. 形式使代码更易于阅读。

顺便说一句,Widget .grid.pack方法返回None 所以当你做类似的事情

L2 = Label(root, text='Choose your tax rate').grid(row=2, column=0, columnspan=5)

它创建标签,将其放入网格中,然后将L2设置为None 如果需要保留对标签的引用,则需要创建小部件并将其分两步放置到网格中,如下所示:

L2 = Label(root, text='Choose your tax rate')
L2.grid(row=2, column=0, columnspan=5)

如果您不需要保留到窗口小部件的引用,但您仍然希望它超过2行拆分,以保持线路长度短就用一个“一次性”的变量,就像我有eb ,和l


正如布莱恩·奥克利(Bryan Oakley)在评论中提到的那样,我们实际上不需要为这些标签提供自己的StringVar textvariable s:我们可以使用小部件的.config方法直接更新其text

import tkinter as tk

def show_tax(rate):
    b = gross.get()
    n = round(b / rate, 2)
    # Format to string with 2 digits after the decimal point
    L6.config(text=format(n, '.2f'))
    t = round(b - n, 2)
    L7.config(text=format(t, '.2f'))

root = tk.Tk()
root.geometry('310x165+250+250')
root.title('Tax calculator')

gross = tk.DoubleVar()

tk.Label(root, text='Input gross amount').grid(row=0, column=0, columnspan=5)

e = tk.Entry(root, textvariable=gross)
e.grid(row=1, column=1, columnspan=3, sticky='WE', padx=5, pady=5)

tk.Label(root, text='Choose your tax rate').grid(row=2, column=0, columnspan=5)

b = tk.Button(root, text='5 %', command=lambda r=1.05: show_tax(r))
b.grid(row=3, column=0, padx=5, pady=5)

b = tk.Button(root, text='8 %', command=lambda r=1.08: show_tax(r))
b.grid(row=3, column=2, padx=5, pady=5)

b = tk.Button(root, text='23 %', command=lambda r=1.23: show_tax(r))
b.grid(row=3, column=4, padx=5, pady=5)

# An empty Label to force row to be displayed
tk.Label(root).grid(row=4, column=0, columnspan=5)

tk.Label(root, text='Net').grid(row=5, column=0, columnspan=2, sticky='WE')
tk.Label(root, text='TAX').grid(row=5, column=3, columnspan=2, sticky='WE')

L6 = tk.Label(root, relief='raised')
L6.grid(row=6, column=0, columnspan=2, sticky='WE')

L7 = tk.Label(root, relief='raised')
L7.grid(row=6, column=3, columnspan=2, sticky='WE')

root.mainloop()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM