python3 - ttk treeview… extraire les valeurs d'une colonne spécifique dans une fonction

StackOverflow https://stackoverflow.com/questions/7365098

  •  28-10-2019
  •  | 
  •  

Question

Je suis très novice en programmation et je n'arrive tout simplement pas à comprendre comment faire fonctionner cela pour moi ...

J'essaie juste de comprendre comment extraire les valeurs de la colonne col4 de l'arborescence dans une fonction qui me permettrait de fournir une somme simple dans l'étiquette result_display en bas.

D'après ce que j'ai lu, je dois utiliser la méthode item sur l'arborescence elle-même, mais je n'arrive pas à comprendre comment la référencer correctement.

J'ai essayé de transférer TOUTE valeur de l'arborescence dans une étiquette de test en utilisant diverses configurations de commande, mais aucune n'a produit autre chose qu'une erreur.

Fondamentalement, je veux que l'utilisateur puisse appuyer sur le bouton des résultats, appeler la fonction fullcalc qui extraira les valeurs dans col4, les additionnera et videra cette somme dans l'étiquette result_display en utilisant la variable textvariable endresult.

Suis-je loin de la base ici?

J'apprécierais toute idée que vous pouvez me donner pour bricoler.

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()
Était-ce utile?

La solution

Je suis nouveau dans l'arborescence, mais je pense avoir votre solution.Ce code vous montrera simplement comment les valeurs sont "empaquetées" afin que vous puissiez les utiliser comme vous le souhaitez.

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))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top