2017-05-18 17 views
1

tkinterリストボックスを計算に使用する方法... ユーザーは2つのリストボックスで選択できます。関数は上部リストボックスのダイスキーから取得し、リストボックスの下位値を下げる必要があります.... - あなたのcalculate機能(しかし、それは動作しません)Tkinterリストボックス計算

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

ここでの主な問題:このようなコード。 curselection()はタプルを返すので、ここでエラーが発生します。もちろん、curselection()[0]を使用することもできますが、選択する必要はなく、文字列を整数に変換する必要があるたびに使用できます。

だから我々はget('active')とし、整数の完全なあなたのdictので、それを回避することができます - 私たちは、変換からの自由です:

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を移動してください!したがって、あなたのリストボックスは、両方のキーが移入されている、あなたはdictのキーを反復各ループでも

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

: は、だから今、あなたのコードは、「作品」または「エラーを生成しません」。あなたのアイデアは、私には明確ではありませんが、下のリストボックスに値を必要とする場合 - このループ(iterating over dict)を使用します。また

for i in pr.values(): 
    si1.insert(END, i) 

+0

を本当にありがとう、それは私に多くを助けた..... –

+0

私はもう一つの問題がある、私はユーザーがキーを参照したい場合、しかし、機能の使用価値...どのように私はそれを行うには? –

+0

@ JanekLass、それはあなた次第です。そして、あなたのアイデアと希望の行動で新しい質問を作成する方が良いです。しかし、アイデアは簡単です - 希望のリストボックスの選択変更を追跡します。 – CommonSense

関連する問題