2015-04-19 3 views
0

Я хотел бы создать 2 разных группы переключателей. Пользователь будет выбирать один вариант из любой группы. Будет функция, которая будет получать значения (строки) из выбранных переключателей, а затем печатать их. Вот мой код, но он не работает (я новичок в python).Как получить значение выбранного переключателя?

from tkinter import * 
root = Tk() 
btn1 = "lol" 
btn2 = "lel" 
def funkcija(): 
    n = entry1.get() 
    m = "null" 
    X = btn1.get() 
    Y = btn2.get() 
    print("%s %s je %s %s." % (n, X, m, Y)) 


theLabel = Label(root, text="Vnesite količino in izberite prvo valuto.") 
theLabel.grid(row=0, columnspan=3) 

gumb1=Radiobutton(root,text="Euro",value = "euro",variable = "btn1").grid(row=2, column=1, sticky=W) 
gumb2=Radiobutton(root,text="Dolar",value = "dolar",variable = "btn1").grid(row=3, column=1, sticky=W) 
gumb3=Radiobutton(root,text="Funt",value = "funt",variable = "btn1").grid(row=4, column=1, sticky=W) 

label3= Label(root, text="Izberite drugo valuto.") 
label3.grid(row=6, columnspan=3) 

label35= Label(root) 
label35.grid(row=5, columnspan=3) 

gumb4=Radiobutton(root,text="Euro",value = "euro",variable = "btn2").grid(row=7, column=1, sticky=W) 
gumb5=Radiobutton(root,text="Dolar",value = "dolar",variable = "btn2").grid(row=8, column=1, sticky=W) 
gumb6=Radiobutton(root,text="Funt",value = "funt",variable = "btn2").grid(row=9, column=1, sticky=W) 

label1 = Label(root, text="Količina:") 
label1.grid(row=1, sticky=E) 
entry1 = Entry(root) 
entry1.grid(row=1, column=1, sticky=W) 

go = Button(root, text="Izračun", fg="white", bg="black", command=funkcija) 
go.grid(row=10, columnspan=3) 

root.mainloop() 
+0

Не могли бы вы написать, что работает? Могли бы вы урезать код на что-то меньшее? – Michas

+0

Это уже было решено :) – Zoxx

ответ

3

В вашей кнопки радио, анализировать параметры, которые вы передаете:

gumb1 = Radiobutton(root, 
        text = "Euro", 
        value = "Euro", 
        variable = "btn2" 

Параметры, value и variable то, что хранит данные кнопки радио. Вы правильно установили свой номер value. Интерпретатор автоматически установит variable с value при выборе переключателя.

Но вот где ваш вопрос:

variable = "btn2" 

"btn2" является строкой. Не очень полезно, правда? Фактически, вы пытаетесь выполнить на нем методы, которые даже не существуют. Например, здесь:

def funkcija(): 
    X = btn2.get() 

Фактически, принимая эту информацию, вы почти добрались туда!

В верхней части вашего скрипта, вам необходимо установить btn2 в StringVar Tkinter, как и так:

from tkinter import * 
btn1 = StringVar() 
btn2 = StringVar() 

Теперь, когда это сделано, давайте изменим наши параметры в наших радиокнопках.

gumb1 = Radiobutton(root, 
       text = "Euro", 
       value = "Euro", 
       variable = btn2 

Теперь Tkinter автоматически обновит переменную, когда она будет выбрана. Чтобы получить значение, сделайте то же самое, что и в своем funkcija.

X = btn2.get() 

И тогда значение btn2 (который был обновлен с помощью кнопок радио) не будут считаны и сохранены в переменную X.

+0

Большое спасибо! Еще один вопрос. Почему мне нужно установить переменные в StringVar ниже root = Tk()? Если я положил их выше root = Tk(), это не сработает. – Zoxx

Смежные вопросы