2015-06-23 2 views
3

Я новичок в программировании, python и Tkinter, и мне нужно хорошее решение (возможно, с помощью state = DISABLED?), Чтобы ограничить параметры пользователя на основе выбранных ими кнопок. Мой подарок Код:Python Tkinter Radiobutton сужает пользовательский ввод

from Tkinter import * 

master = Tk() 

def ok(): 
    master.destroy() 

v1 = IntVar() 
v2 = IntVar() 
v3 = IntVar() 
v4 = IntVar() 
v5 = IntVar() 

Label(master, text="""Which Method do you want to run?""",justify = LEFT, padx = 20).pack() 
Radiobutton(master, text="Positive",padx = 20, variable=v1, value=1).pack(anchor=W) 
Radiobutton(master, text="Negative", padx = 20, variable=v1, value=2).pack(anchor=W) 
Radiobutton(master, text="Both", padx = 20, variable=v1, value=3).pack(anchor=W) 

Label(master, text="""Choose a tray type:""",justify = LEFT, padx = 20).pack() 
a1=Radiobutton(master, text="54",padx=20,variable=v2,value=1).pack(anchor=W) 
a2=Radiobutton(master, text="96",padx = 20, variable=v2, value=2).pack(anchor=W) 

Label(master, text="""Sort by columns(default) or rows?""",justify = LEFT, padx = 20).pack() 
b1=Radiobutton(master, text="columns",padx=20,variable=v3,value=1).pack(anchor=W) 
b2=Radiobutton(master, text="rows",padx = 20, variable=v3, value=2).pack(anchor=W) 

Label(master, text="""Choose a tray number:""",justify = LEFT, padx = 20).pack() 
c1=Radiobutton(master, text="Stk1-01",padx = 20, variable=v4, value=1).pack(anchor=W) 
c2=Radiobutton(master, text="Stk1-02", padx = 20, variable=v4, value=2).pack(anchor=W) 
c3=Radiobutton(master, text="Stk1-03",padx = 20, variable=v4, value=3).pack(anchor=W) 
c4=Radiobutton(master, text="Stk1-04", padx = 20, variable=v4, value=4).pack(anchor=W) 
c5=Radiobutton(master, text="MT1-Frnt",padx = 20, variable=v4, value=5).pack(anchor=W) 

c6=Radiobutton(master, text="MT1-Rear", padx = 20, variable=v4, value=6).pack(anchor=W) 
c7=Radiobutton(master, text="MT2-Frnt",padx = 20, variable=v4, value=7).pack(anchor=W) 
c8=Radiobutton(master, text="MT2-Rear", padx = 20, variable=v4, value=8).pack(anchor=W) 


Label(master, text="""Would you like to insert a midpoint standard and blank?""",justify = LEFT, padx = 20).pack() 
Radiobutton(master, text="Yes",padx = 20, variable=v5, value=1).pack(anchor=W) 
Radiobutton(master, text="No", padx = 20, variable=v5, value=2).pack(anchor=W) 

Button(master, text="OK", command=ok).pack() 

master.mainloop() 

Я хочу способ, так что при выборе a1, c6 через с8 не могут быть выбраны пользователем. Аналогично, если выбрано a1, пользователь не сможет выбрать либо b1, либо b2. Вероятно, существует возможность использовать sample = DISABLED для серого из невыбранных ответов или, возможно, использовать функцию, чтобы параметры отображались после выбора значения. Любая помощь приветствуется!

ответ

0

Я сделал некоторые существенные, хотя и легкие изменения в вашем примере кода здесь, чтобы сделать вещи более доступными.

Я включил все виджеты в класс, чтобы иметь лучший доступ к ним в рамках функций. В принципе, вы хотите просто функцию обратного вызова при любом изменении a1 и a2, которое отключит c6-8, если 1, а затем включить их.

Я также должен был сделать некоторые из ваших заявлений пакета произойдет на отдельной строке, Radiobutton(...).pack() вернется None и сделать self.someRadiobutton «s config недоступны.

Вот код, чтобы вы могли видеть, что я имею в виду.

from Tkinter import * 

class Window(): 

    def __init__(self, master): 

     self.master = master 
     self.v1 = IntVar() 
     self.v2 = IntVar() 
     self.v3 = IntVar() 
     self.v4 = IntVar() 
     self.v5 = IntVar() 

     Label(master, text="""Which Method do you want to run?""",justify = LEFT, padx = 20).pack() 
     Radiobutton(master, text="Positive",padx = 20, variable=self.v1, value=1).pack(anchor=W) 
     Radiobutton(master, text="Negative", padx = 20, variable=self.v1, value=2).pack(anchor=W) 
     Radiobutton(master, text="Both", padx = 20, variable=self.v1, value=3).pack(anchor=W) 

     Label(master, text="""Choose a tray type:""",justify = LEFT, padx = 20).pack() 
     self.a1=Radiobutton(master, text="54",padx=20,variable=self.v2,value=1, command = self.disable).pack(anchor=W) 
     self.a2=Radiobutton(master, text="96",padx = 20, variable=self.v2, value=2, command = self.disable).pack(anchor=W) 

     Label(master, text="""Sort by columns(default) or rows?""",justify = LEFT, padx = 20).pack() 
     self.b1=Radiobutton(master, text="columns",padx=20,variable=self.v3,value=1) 
     self.b1.pack(anchor=W) 
     self.b2=Radiobutton(master, text="rows",padx = 20, variable=self.v3, value=2) 
     self.b2.pack(anchor=W) 

     Label(master, text="""Choose a tray number:""",justify = LEFT, padx = 20).pack() 
     self.c1=Radiobutton(master, text="Stk1-01",padx = 20, variable=self.v4, value=1).pack(anchor=W) 
     self.c2=Radiobutton(master, text="Stk1-02", padx = 20, variable=self.v4, value=2).pack(anchor=W) 
     self.c3=Radiobutton(master, text="Stk1-03",padx = 20, variable=self.v4, value=3).pack(anchor=W) 
     self.c4=Radiobutton(master, text="Stk1-04", padx = 20, variable=self.v4, value=4).pack(anchor=W) 
     self.c5=Radiobutton(master, text="MT1-Frnt",padx = 20, variable=self.v4, value=5).pack(anchor=W) 

     self.c6=Radiobutton(master, text="MT1-Rear", padx = 20, variable=self.v4, value=6) 
     self.c6.pack(anchor=W) 
     self.c7=Radiobutton(master, text="MT2-Frnt",padx = 20, variable=self.v4, value=7) 
     self.c7.pack(anchor=W) 
     self.c8=Radiobutton(master, text="MT2-Rear", padx = 20, variable=self.v4, value=8) 
     self.c8.pack(anchor=W) 


     Label(master, text="""Would you like to insert a midpoint standard and blank?""",justify = LEFT, padx = 20).pack() 
     Radiobutton(master, text="Yes",padx = 20, variable=self.v5, value=1).pack(anchor=W) 
     Radiobutton(master, text="No", padx = 20, variable=self.v5, value=2).pack(anchor=W) 

     Button(master, text="OK", command=self.ok).pack() 

    def ok(self): 
     self.master.destroy() 

    def disable(self): 

     if self.v2.get() == 1: 
      self.b1.config(state = 'disabled') 
      self.b2.config(state = 'disabled') 
      self.c6.config(state = 'disabled') 
      self.c7.config(state = 'disabled') 
      self.c8.config(state = 'disabled') 

     else: 
      self.b1.config(state = 'normal') 
      self.b2.config(state = 'normal') 
      self.c6.config(state = 'normal') 
      self.c7.config(state = 'normal') 
      self.c8.config(state = 'normal') 

master = Tk() 
w = Window(master) 
master.mainloop() 

Если вы хотите, чтобы сделать это без использования класса вы должны передать ссылку на соответствующий Radiobuttons и IntVars функции disable. Если вы хотите увидеть, как просто дайте мне знать в комментарии.

+0

Спасибо @maccartm! Мне когда-нибудь нужно будет устроиться на занятиях, так что теперь я могу начать. –