如何使用tkinter列表框进行计算... 用户可以在两个列表框中进行选择,功能应该从上面的列表框dic键和下面的列表框dic值.... 我有这样的代码:(但它没有工作)
from tkinter import *
from tkinter import ttk
def calculate():
a = int(l1.curselection())
b = int(si1.curselection())
t = a+b
t=Label(aken,text="answer: %.2f" % tulemus).grid(row=7,column=5)
return(t)
aken = Tk()
aken.title('kalk')
aken.configure(background='#E6F3FE')
aken.geometry("420x200")
l1 = ttk.Label(aken, text="2 ", background="#E6F3FE")
l1.grid(column=0, row=3, padx=5, pady=5, sticky=(N, W, ))
l1 = Listbox(aken, height=1)
pr = {50:60,80:46}
for i in pr:
l1.insert(END, i)
l1.grid(column=1, row=3, padx=5, pady=5, sticky=(N, W, E))
si1 = ttk.Label(aken, text="1 ", background="#E6F3FE")
si1.grid(column=0, row=4, padx=5, pady=5, sticky=(N, W, ))
si1 = Listbox(aken, height=1)
pr = {50:60,80:46,8:6}
for i in pr:
si1.insert(END, i)
si1.grid(column=1, row=4, padx=5, pady=5, sticky=(N, W, E))
nupp = ttk.Button(aken, text="Calculate", command=calculate)
nupp.grid(column=1, row=7, padx=5, pady=5, sticky=(N, S, W, E))
aken.mainloop()
答案 0 :(得分:0)
此处的主要问题 - 您的calculate
功能。你在这里得到错误,因为curselection()
返回一个元组。当然,你可以使用curselection()[0]
,但是每次你需要将字符串转换为整数时都没有选择。
因此,我们可以使用get('active')
解决问题,因为您的字典充满了整数 - 我们可以免于转换:
def calculate():
a = l1.get('active')
b = si1.get('active')
tulemus = a+b
Label(aken, text="answer: %.2f" % tulemus).grid(row=7, column=5)
循环中的另一个弱点 - grid
。随意移动grid
!
所以现在你的代码"工作"或"不产生错误":
from tkinter import *
from tkinter import ttk
def calculate():
a = l1.get('active')
b = si1.get('active')
tulemus = a+b
Label(aken, text="answer: %.2f" % tulemus).grid(row=7, column=5)
aken = Tk()
aken.title('kalk')
aken.configure(background='#E6F3FE')
aken.geometry("420x200")
l1 = ttk.Label(aken, text="2 ", background="#E6F3FE")
l1.grid(column=0, row=3, padx=5, pady=5, sticky=(N, W, ))
l1 = Listbox(aken, height=1)
l1.grid(column=1, row=3, padx=5, pady=5, sticky=(N, W, E))
pr = {50: 60, 80: 46}
for i in pr:
l1.insert(END, i)
si1 = ttk.Label(aken, text="1 ", background="#E6F3FE")
si1.grid(column=0, row=4, padx=5, pady=5, sticky=(N, W, ))
si1 = Listbox(aken, height=1)
si1.grid(column=1, row=4, padx=5, pady=5, sticky=(N, W, E))
pr = {50: 60, 80: 46, 8: 6}
for i in pr:
si1.insert(END, i)
nupp = ttk.Button(aken, text="Calculate", command=calculate)
nupp.grid(column=1, row=7, padx=5, pady=5, sticky=(N, S, W, E))
aken.mainloop()
同样在每个循环中,您遍历dict键,因此列表框都填充了键。您的想法对我来说并不清楚,但如果您需要较低列表框中的值 - 请使用此循环(iterating over dict
):
for i in pr.values():
si1.insert(END, i)
此外: