2016-03-08 2 views
-1

Я все еще работаю над этой же программой, и я сделал крошечный прогресс. Тип приложения находит словарь, но вся информация неустойчива. Вот картина того, что у меня до сих пор.Невозможно заполнить python tkinter Combobox из словаря

Wonky Combobox

Я новичок в Python и в программировании. Если бы кто-нибудь мог помочь мне с какой-либо частью моего кода, я бы слушал и учился! Вот мой код.

from tkinter import * 
from tkinter import ttk 


#Experience Per Level Dictionary 
import csv 
exptable = csv.DictReader(open('C:/Users/LemDog/Desktop/WinPython 3.5.1.2/python-3.5.1.amd64/Scripts/Ragnarok Stuff/Ragnarok Base Level.csv')) 

result = {} 
for row in exptable: # should actually be called `row` 
    if row['Current Level'] not in result: 
     result[row['Current Level']] = row['Total EXP'] 


#All the math behind the GetKills Button 



#Creates Tkinter Window 
root = Tk() 
root.title("How many Kills?") 
mainframe = ttk.Frame(root, padding="3 3 70 12") 
mainframe.grid(column=0, row=0, sticky=(N, W, E, S)) 
mainframe.columnconfigure(0, weight=1) 
mainframe.rowconfigure(0, weight=1) 

expper = StringVar() 
currentlevel = StringVar() 
desiredlevel = StringVar() 
killamount = StringVar() 


#OptionMenu From Dictionary 
combobox = ttk.Combobox(mainframe) 
combobox.grid(column=3, row=1) 

combobox.set(result) 

for item in [result]: 
    combobox.insert(END, result) 

#Creats Current Level Text Entry Field 
currentlevel = ttk.Entry(mainframe, width=10, textvariable=currentlevel) 
currentlevel.grid(column=2, row=1, sticky=(W, E)) 

#Creates Exp Per Kill Text Entry Field 
expper_entry = ttk.Entry(mainframe, width=10, textvariable=expper) 
expper_entry.grid(column=2, row=2, sticky=(W, E)) 

#Creats Desired Level Text Entry Field 
desiredlevel_entry = ttk.Entry(mainframe, width = 10, textvariable=desiredlevel) 
desiredlevel_entry.grid(column=2, row=3, sticky=(W, E)) 


#Creates Button and Print Label for How Many Kills. 
ttk.Label(mainframe, textvariable=killamount).grid(column=2, row=4, sticky=(W, E)) 
ttk.Button(mainframe, text="How many!?", command=getkills).grid(column=1, row=4, sticky=W) 

ttk.Label(mainframe, text="Current Level").grid(column=1, row=1, sticky=W) 
ttk.Label(mainframe, text="Experience Per Kill").grid(column=1, row=2, sticky=E) 
ttk.Label(mainframe, text="Desired Level").grid(column=1, row=3, sticky=W) 

for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5) 
root.mainloop() 

Любая помощь вообще оценивается! Спасибо за попытку заранее!

+1

, так как мы не имеем файл данные, это поможет, если вы могли бы имитировать данные с помощью небольшого жестко запрограммированного списка значений. –

+0

, если вы посмотрите [документацию для combobox] (http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/ttk-Combobox.html), вы увидите, что '.set()' метод просто устанавливает текущий контент, поэтому вы видите строковое представление своего словаря. Я думаю, вы хотите 'values ​​= result' в конструкторе combobox –

ответ

0

Кажется, вы выбрали весь __repr__ вашего result dict в качестве выбранного элемента, и, кроме того, кажется, что ваши данные искажены в списке.

Попробуйте удалить .set и combobox.insertfor петли и с помощью этого:

combobox.configure(values=list(result.values())) 
# or result.keys() if that's your intent 
Смежные вопросы