2012-06-19 3 views
1

У меня есть два виджета OptionMenu в простых кусков кода, показанными ниже:Связывание двух виджетов OptionMenu TkInter

variable = StringVar(win1)        
    variable.set(number(number2)) 
    type = OptionMenu(win1, variable, "None", "Clear", "Dark", "Heavy",) 
    type.grid(row=i, column=3, sticky="nsew", padx=1, pady=1) 


    variableunit = StringVar(win1) 
    variableunit.set(unit) 
    unit = OptionMenu(win1, variableunit, "colour", "shade") 
    unit.grid(row=i, column=5, sticky="nsew", padx=1, pady=1) 

Я пытался следы с функцией обратного вызова и до сих пор не работал. Я хотел бы связать, когда в первом меню выбрано «Тяжелый», второе меню всегда «цветное». Для остальных вариантов второе меню всегда должно быть по умолчанию «оттенком», но может быть изменено.

Буду признателен, может кто-нибудь мне помочь. Я уже посмотрел на сайт effbot с переменными и следами, но я все еще застрял.

+0

Что вы имеете в виду, когда «Load» выбрано в «Heavy» в первом меню? Что такое «Нагрузка»? – Junuxx

ответ

1

Это не совсем понятно, что вы хотите, но я думаю, что это должно это сделать.

Когда в первом меню выбрано «Тяжелый», во втором выбирается «цвет», и это меню отключено (невозможно выбрать что-либо еще). Когда в первом меню выбрано что-то еще, второй переходит в «мм» и снова включается.

from Tkinter import * 

class app: 
    def __init__(self, root): 
     win1 = Frame(root) 
     win1.grid(row=0,column=0) 

     self.variable = StringVar(win1)        
     self.variable.set(42) 
     self.type = OptionMenu(win1, self.variable, 
          "None", "Clear", "Dark", "Heavy", 
          command = self.varMenu) 
     self.type.grid(row=1, column=3, sticky="nsew", padx=1, pady=1) 


     self.variableunit = StringVar(win1) 
     self.variableunit.set('mm') 
     self.unit = OptionMenu(win1, 
          self.variableunit, "mm", "colour", "shade") 
     self.unit.grid(row=1, column=5, sticky="nsew", padx=1, pady=1) 

    def varMenu(self, selection): 
     if selection == "Heavy": 
      self.variableunit.set("colour") 
      self.unit.config(state = DISABLED) 
     else: 
      self.variableunit.set("mm") 
      self.unit.config(state = NORMAL) 

root = Tk() 
a = app(root) 
root.mainloop() 
+0

Эта работа, отличная от единицы, не изменяется на «цвет», остается «мм» и становится отключенной. – user2063

+0

@ user2063: Вы уверены, что вы скопировали мой код напрямую? Он отлично меняет цвет. – Junuxx

+0

Я не копировал его напрямую, но я это понял. Еще раз опечатка ... Спасибо! – user2063

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