2016-02-03 2 views
0

У меня есть этот код, который просит пользователя выбрать один из вариантов. Я использовал радиопульты. После того, как пользователь выберет свой выбор, на выбор будет использован другой оператор if. Я уже назначил переменную выбора как variable = specialistchoose. Но когда я использую specialistchoose или specialistchoose.get(), он не работает. Может ли кто-нибудь помочь?Назначить переменную радиоблоку Tkinter

   specialistchoose = IntVar() 

       r1 = Radiobutton (f2, text = "Cardiology", variable = specialistchoose, value = 1, command = command_r1) 
       r1.grid(row = 4, column = 0, stick = W) 

       r2 = Radiobutton (f2, text = "Gastroenterology", variable = specialistchoose, value = 2, command = command_r2) 
       r2.grid(row = 4, column = 1,stick = W) 

       r3 = Radiobutton (f2, text = "Dermatology", variable = specialistchoose, value = 3, command = command_r3) 
       r3.grid (row = 4, column = 2,stick = W) 

       r4 = Radiobutton (f2, text = "Psychiatry", variable = specialistchoose, value = 4, command = command_r4) 
       r4.grid (row = 5, column = 0,stick = W) 

       r5 = Radiobutton (f2, text = "Dentist", variable = specialistchoose, value = 5, command = command_r5) 
       r5.grid(row = 5, column = 1,stick = W ) 

       f2.place(relx = 0.01, rely = 0.125, anchor = NW) 
       Label(f1, text = "Specialist").place(relx = .06, rely = 0.125, anchor = W) 

       f1.grid(stick = W) 

       if specialistchoose.get() == "Cardiology": 
        file = open ("test2.txt", "w") 
        file.write ("Specialist : Cardiology") 
        file.close() 
       elif specialistchoose.get() == "Gastroenterology": 
        file = open ("test2.txt", "w") 
        file.write ("Specialist : Gastroenterology") 
        file.close() 
       elif specialistchoose.get() == "Dermatology": 
        file = open ("test2.txt", "w") 
        file.write ("Specialist : Dermatology") 
        file.close() 
       elif specialistchoose.get() == "Psychiatry": 
        file = open ("test2.txt", "w") 
        file.write("Specialist : Psychiatry") 
        file.close() 
       elif specialistchoose.get() == "Dentist": 
        file = open ("test2.txt", "w") 
        file.write("Specialist : Dentist") 
        file.close()   

примечание: это всего лишь образец более длинного кода.

ответ

2

Поскольку вы являетесь get() ting их значениями только после того, как они были созданы, вы получите только их начальное значение и ничего больше.

Попробуйте получить их значение, используя command или другую кнопку.

Не знаю, что у вас есть под command_rX s, но вы должны разделить их и поставить под соответствующими command s.

Кроме того, поскольку ваши переменные являются IntVar(), и вы получите value, который будет составлять от 1 до 5 включительно, так как вы назначили его как таковой.

def command_r1(): 
    with open('test2.txt', 'w') as file: 
     file.write ("Specialist : Cardiology") 

def command_r2(): 
    with open('test2.txt', 'w') as file: 
     file.write ("Specialist : Gastroenterology") 
#etc... 

или создать кнопку, когда она будет нажата, она получит значение и сделает все это, если что-то еще.

def external_button_callback(): 
    radioValue = specialistchoose.get() 
    if radioValue == 1: 
     with open('test2.txt', 'w') as file: 
      file.write ("Specialist : Cardiology") 
    #etc... 

btn = Button(f2, text= "Get Value" command = external_button_callback) 
btn.grid(row=6, column=0) 

Еще одна маленькая вещь есть, при использовании файлов, то лучше использовать with заявление, так как он обрабатывает закрытие автоматически при перемещении из области видимости, и вам не нужно беспокоиться о закрытии каждый раз.

И каждый раз, когда вы меняете значение, этот txt-файл будет создан с нуля, так как вы открываете его в режиме w. Я не знаю, так это то, чего вы хотели или нет, но хотели дать хедз-ап.

0

Значение radiobutton Переменная не имеет отношения к ее text. Вы указали переменную specialistchoose равной IntVar, так что это будет какой-то int.

if specialistchoose.get() == "Cardiology": никогда не будет True

Вчера я ответил на ваш вопрос по той же самой теме здесь: Gray out a frame after clicking a radiobutton Tkinter

Если вы изменяете func к чему-то вроде этого:

def func(): 
    print specialistchoose.get() 

Вы будете способный видеть, какие значения каждый radiobutton получает, когда он нажат.

Оттуда вы можете сделать условие, если оно нажато, или нет.

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