2013-11-13 3 views
1

Извините, что за основную суть вопроса. Ткинтер меня полностью сбивает с толку.Python/Tkinter получение текста из поля ввода

Я пытаюсь создать приложение с помощью строки меню, один из вариантов приведет к диалогу, в котором пользователь вводит два значения, а затем либо нажимает кнопку «Ввод», либо «Отмена». При каждом нажатии кнопки следует закрыть окно.

Я могу построить главное окно и «всплывающее окно», чтобы ввести значения, я просмотрел все примеры извлечения текста и закрытия окна после нажатия кнопки, но я все еще не пуст. Вот структура, которую я бы хотел использовать:

from Tkinter import * 

# 
# Functions to perform functions selected from main window 
# 

def enter_values(): 
    new_window = Toplevel(root) 
    Label(new_window, text="Value 1").grid(sticky=W,row=0) 
    e1=Entry(new_window,width=40).grid(row=0,column=1,sticky=W) 
    Label(new_window, text="Value 2").grid(pady=20,sticky=W,row=1) 
    e2=Entry(new_window,width=20).grid(row=1,column=1,pady=20,sticky=W) 
    ok= Button(new_window, text="Enter",command=lambda: callback("OK")).grid(column=0,row=4,pady=30) 
    cancel = Button(new_window,text="Cancel",command=lambda: callback("CANCEL")).grid(column=1,row=4,pady=30) 

def callback(button): 
     if button == "OK": 
      print "OK" 
     elif button == "CANCEL": 
      print "Cancel" 
     else: 
      print "no idea" 

# 
# Following section defines the display window 
# 

root = Tk() 
root.minsize(500,200) 
root.geometry("800x300") 
root.wm_title("Some clever title here") 
menubar = Menu(root) 
filemenu = Menu(menubar, tearoff=0) 
filemenu.add_command(label="New", command=enter_values) 
filemenu.add_separator() 
filemenu.add_command(label="Exit", command=root.quit) 
menubar.add_cascade(label="File", menu=filemenu) 

root.config(menu=menubar) 
root.mainloop() 

ответ

1

Вам нужно закрыть окно new_window.destroy(). Чтобы получить текст из записей, определите переменные, назначьте их Записи и получите значения, когда это необходимо. Не лучший пример, но что-то вроде этого будет работать:

from tkinter import * 

# 
# Functions to perform functions selected from main window 
# 

def enter_values(): 
    v1 = StringVar() 
    v2 = StringVar() 
    new_window = Toplevel(root) 
    Label(new_window, text="Value 1").grid(sticky=W,row=0) 
    Entry(new_window,textvariable=v1,width=40).grid(row=0,column=1,sticky=W) 
    Label(new_window, text="Value 2").grid(pady=20,sticky=W,row=1) 
    Entry(new_window,textvariable=v2,width=20).grid(row=1,column=1,pady=20,sticky=W) 
    ok= Button(new_window, text="Enter",command=lambda: callback("OK",new_window,v1,v2)).grid (column=0,row=4,pady=30) 
    cancel = Button(new_window,text="Cancel",command=lambda: callback("CANCEL",new_window)).grid(column=1,row=4,pady=30) 


def callback(button,new_window,v1=None,v2=None): 
    if button == "OK": 
     print("OK") 
     print(v1.get()) 
     print(v2.get()) 
    elif button == "CANCEL": 
     print("Cancel") 
    else: 
     print("no idea") 
    new_window.destroy() 


# 
# Following section defines the display window 
# 

root = Tk() 
root.minsize(500,200) 
root.geometry("800x300") 
root.wm_title("Some clever title here") 
menubar = Menu(root) 
filemenu = Menu(menubar, tearoff=0) 
filemenu.add_command(label="New", command=enter_values) 
filemenu.add_separator() 
filemenu.add_command(label="Exit", command=root.quit) 
menubar.add_cascade(label="File", menu=filemenu) 
root.config(menu=menubar) 
root.mainloop() 
+0

Большое спасибо, что убивает окно. Как получить содержимое текстовых полей? – user1148257

+0

Удивительный! Я не знаю, почему у меня был такой мозг. – user1148257

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