Tkinter列表框计算

时间:2017-05-18 05:56:37

标签: tkinter

如何使用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()

1 个答案:

答案 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)

此外: