2011-09-09 5 views
0

私はプログラミングに新しいので、私のためにこの仕事をする方法を理解できません...python3 - ttk treeview ...特定の列の値を関数に抽出する

私はツリービューのcol4の値を、result_displayラベルの下にある単純な合計を提供する関数に抽出する方法を考えようとしています。

私が読んだところでは、ツリービュー自体でアイテムメソッドを使用する必要がありますが、正しく参照する方法を理解できません。

私は、ツリービューのANY値をさまざまなコマンド設定を使ってテストラベルにダンプしようとしましたが、何もエラー以外の何も生成していませんでした。

基本的には、ユーザーが結果ボタンを押して、col4で値を抽出し、それらを追加してendresult textvariableを使用してresult_displayラベルにその合計をダンプするfullcalc関数を呼び出せます。

ここですか?

私はあなたが私に微妙な悩みを与えることができます。

import tkinter 
from tkinter import * 
from tkinter import ttk 

### PRIMARY WINDOW AND FRAME ELEMENTS 
root = Tk() 
root.title('Calorie Counter') 
entryframe = ttk.Frame(root, padding='10 10 10 10').grid(column=0, row=0) 
listframe = ttk.Frame(root, padding='10 10 10 10').grid(column=0, row=3) 
resultframe = ttk.Frame(root, padding='10 10 10 10').grid(column=0, row=6) 

### GLOBAL VARIABLES 
namevar = StringVar() 
calentvar = DoubleVar() 
volentvar = DoubleVar() 
usedentvar = DoubleVar() 
calinvar = DoubleVar() 
uomvar = StringVar() 
endresult = IntVar() 


### FUNCTIONS 
def itemadd(): 
    try: 
     c0 = namevar.get() 
     c2 = usedentvar.get() 
     c3 = calinvar.get() 
     f1 = volentvar.get() 
     f2 = calentvar.get() 
     cpv = f2 // f1 

     tv.insert("",0,text=c0, values=(c0,cpv,c2,c3)) 
    except ValueError: 
     pass 

def itemremove(): 
    try: 
     tv.delete(tv.focus()) 
    except ValueError: 
     pass 

def itemupdate(**args): 
    try: 
     a = calentvar.get() 
     b = volentvar.get() 
     c = (a/b) 
     d = usedentvar.get() 
     calinvar.set(c * d) 
    except ValueError: 
     pass 

def fullcalc(): 
    try: 
     pass 
    except ValueError: 
     pass 


### ENTRY FRAME ELEMENTS 
# Labels 
name_label = ttk.Label(entryframe, text='Item Name').grid(column=0, row=0, columnspan=1) 
calpervol_label = ttk.Label(entryframe, text='Calories/Volume').grid(column=1, row=0, columnspan=2) 
uom_label = ttk.Label(entryframe, text='Unit of Measure').grid(column=3, row=0, columnspan=1) 
used_label = ttk.Label(entryframe, text='Amount Used').grid(column=4, row=0, columnspan=1) 
incal_label = ttk.Label(entryframe, text='Calories').grid(column=5, row=0, columnspan=1) 

# Variable Entry/Display Elements 
name_entry = ttk.Entry(entryframe, width=20, textvariable=namevar).grid(column=0, row=1, columnspan=1) 
cal_entry = ttk.Entry(entryframe, width=12, textvariable=calentvar).grid(column=1, row=1, columnspan=1, sticky=(E)) 
vol_entry = ttk.Entry(entryframe, width=12, textvariable=volentvar).grid(column=2, row=1, columnspan=1, sticky=(W)) 
uom_combo = ttk.Combobox(entryframe, width=10, state='readonly', textvariable=uomvar, values=['grams', 'milliliters', 'teaspoons', 'tablespoons', 'cups']).grid(column=3, row=1, columnspan=1) 
used_entry = ttk.Entry(entryframe, width=10, textvariable=usedentvar).grid(column=4, row=1, columnspan=1) 
cal_label = ttk.Label(entryframe, width=10, textvariable=calinvar).grid(column=5, row=1, columnspan=1) 

# Buttons 
add_button = ttk.Button(entryframe, text='Add Item', command=itemadd).grid(column=0, row=2, columnspan=1, sticky=(E)) 
remove_button = ttk.Button(entryframe, text='Remove Item', command=itemremove).grid(column=1, row=2, columnspan=1, sticky=(W)) 
update_button = ttk.Button(entryframe, text='Calculate', command=itemupdate).grid(column=5, row=2, columnspan=1) 


### LIST FRAME ELEMENTS 
tv = ttk.Treeview(listframe, show='headings') 
tv["columns"]=("col0", "col1","col2","col3") 
tv.column("col0",width=100) 
tv.column("col1",width=100,anchor="center") 
tv.column("col2",width=100) 
tv.column("col3",width=100) 
tv.heading("col0",text="Item") 
tv.heading("col1",text="Calories per Volume") 
tv.heading("col2",text="Volume Used") 
tv.heading("col3",text="Calories Included") 
tv.grid(column=0, row=3, columnspan=6) 


### RESULT FRAME ELEMENTS 
results = ttk.Button(resultframe, text='Calculate Total', command=fullcalc).grid(column=0, row=18) 
results_label = ttk.Label(resultframe, text='Total Calories : ').grid(column=3, row=18) 
results_display = ttk.Label(resultframe, textvariable=endresult) 


### PROGRAM RUN ELEMENTS 
root.mainloop() 

答えて

2

私はtreeviewを初めて使っていますが、私はあなたの解決策があると思います。このコードでは、値がどのように「パッケージ化」されているかを示すだけで、好きなように使用することができます。

def fullcalc(): 
    try: 
     # get a list of children of the root node 
     children = tv.get_children() 
     for child in children: 
      # For some odd reason the "set" method actually returns the values 
      # if you're not actually setting something 
      print(tv.set(child)) 
関連する問題