2016-01-12 4 views
-1

Я пытаюсь создать окно ввода для ввода пользователем переменной, которая не существует в списке виджета optionmenu. Это возможно?Создайте поле ввода, если выбран конкретный элемент в Optionmenu

from Tkinter import * 
import Tkinter as tk 

class Demo1: 
    def __init__(self, master): 
     self.master = master 
     self.frame = tk.Frame(self.master) 
     x = (master.winfo_screenwidth() - master.winfo_reqwidth())/2 
     y = (master.winfo_screenheight() - master.winfo_reqheight())/2 
     master.geometry("+%d+%d" % (x, y)) 
     master.deiconify() 

     self.subtests = StringVar() 
     self.subtests.set("Enter Test Type") 

     choices = ['Potato','Tomato','Onion','Other'] 
     self.testnumber = OptionMenu(master, self.subtests, *choices).grid(row = 2, column = 3) 
     self.confirmbutton = Button (master, text="Confirm Test", width=20, command =lambda: self.confirmsubtest(master)) 
     self.confirmbutton.grid(row = 5, sticky = E) 

def main(): 
    root = tk.Tk() 
    app = Demo1(root) 
    root.mainloop() 

if __name__ == '__main__': 
    main() 

Как уже упоминалось, если пользователю необходимо выбрать переменную, которой нет в списке. Возможно ли разрешить пользователю вручную вводить переменную через поле ввода в том же окне (например: выбор «Другое» в списке, который генерирует запись/виджет/что-то)?

+0

Я думаю, что вы можете использовать testnumber [ "Меню"]. Удалить (0, END), чтобы удалить, а затем testnumber [ "Меню"]. Add_command (метка = choices_item, ... и т.д.., Чтобы добавить все Элементы. Это может быть не совсем правильно, но достаточно близко, чтобы найти ответ через поисковую систему. –

+0

Возможно, вам придется упаковать свои объекты ('OptionMenu',' Button') с помощью метода 'pack'. –

ответ

0

Если кто-то ищет то же самое. Процесс заключается в том, чтобы добавить переменную команды в меню optionmenu и отключить виджет ввода после того, как выбранный выделенный выбор включен. Это делается путем настройки кнопки/виджета/чего-либо с помощью .config (state = NORMAL) или .config (state = DISABLED).

self.testnumber = OptionMenu(master, self.subtests, *choices, command = self.optupdate).grid(row = 2, column = 3) 
self.testnumber.grid(row = 4, column = 1) 

    def optupdate(self,value): 
    if value == "Other": 
     self.otherEntry.config(state=NORMAL) 
    else: 
     self.otherEntry.config(state=DISABLED) 
    return