Prisijungti

ttk combobox ir žodynas (dictionary)

  • 2 Vas '14

Sveiki, kuriu šiokią tokią programėlę savo reikmėms. Noriu padaryti taip kad pagal tą raktą (key) kurį vartotojas pasirenka atspausdintų vertę (value). Tarkim yra žodynas:
Vardas - Petras
Pavardė - Petraitis
Amžius - trisdešimt
Miestas - Kaunas

Ir kad vartotojui pasirinkus iš combobox Vardas po apačia jam atspausdintų Petras, pasirinkus Miestas atspausdintų Kaunas ir t.t.

Bėda kad niekaip nepavyksta su kintamuju tipais. T.y. kai vartotojas pasirenka kažką iš combobox tai kintamasis kuris saugo pasirinkimą būna StringVar() tipo. Ir jeigu jį paverčiu į String vistiek arba nieko nerodo arba įgauna PyVar27, PyVar65 ir t.t. reikšmę, o su ja nieko iš žodyno paimti negaliu.

ttk.Label(mainframe, textvariable=Dict[aaa]).grid(column=2, row=4, sticky="W")

Dict - žodynas
aaa - kintamasis (string tipo).

Esmė jeigu įrašau Dict["Vardas"], tada gaunu Petras - viskas kaip ir turėtų būti.
Bet jeigu kintamajam aaa priskiriu "Vardas" reikšmę, tada nieko negaunu :/
Gal kas nors buvot susidūrę su panašiom bėdom?

  • 3 Vas '14

Šiaip prie python retai kada tenka prisėsti, o prie thinker dar rečiau
Iš tiek kiek papostinai tai sunku spėlioti (visgi ne thinkerio hakeris), bet šioki tokį samplą sukrapščiau gal pravers.

from tkinter import Tk, StringVar, ttk

root = Tk()

selectDataOptions = {}
selectDataOptions['Vardas'] = ('Petras', 'Jonas', 'Gedeminas')
selectDataOptions['Miestas'] = ('Vilnius', 'Kaunas', 'Klaipeda')

selectDataTypesValue = StringVar()

def drawDataDropdown(event=None):
    selectDataTypesValue = selectDataTypes.get()
    selectDataValue = StringVar()
    selectData = ttk.Combobox(root, textvariable=selectDataValue, state='readonly')
    selectData['values'] = selectDataOptions[selectDataTypesValue]
    selectData.current(0)
    selectData.grid(column=0, row=1)

selectDataTypes = ttk.Combobox(root, textvariable=selectDataTypesValue, state='readonly')
selectDataTypes['values'] = ('Miestas', 'Vardas')
selectDataTypes.current(0)
selectDataTypesValue = selectDataTypes['values'][0]
selectDataTypes.grid(column=0, row=0)
selectDataTypes.bind("<<ComboboxSelected>>", drawDataDropdown)

if __name__ == '__main__':
    root.mainloop()

P.S. jei mes klaidą dėl nerandančio tkinter pakeisk į Tkinter, Python3 jis buvo pervadintas.

  • 5 Vas '14

Ačiū. Kažkaip panašiai ir išspręndžiau

Atsakyti