2017-02-15 12 views
0

Я пытаюсь создать кнопку просмотра в tkinter. Я создал диалоговое окно открытой папки, но когда я установил его на кнопку, он выйдет из окна.Tkinter Browse Button Self Deleting

Моя конечная цель состоит в том, чтобы: 1) нажмите на кнопку и вызвать окно диалога файл 2) выбрать файл 3) вставить имя файла в запись Widget для последующего использования

I Should обратите внимание, что я использую несколько оконных фреймов для последующего кода.

import os 
import sys 
import Tkinter as tk 
from tkFileDialog import askopenfilename 

def openFile(entryWidgetName): 
    tk.Tk().withdraw() 
    filename = askopenfilename() 
    entryWidgetName.delete(0,tk.END) 
    entryWidgetName.insert(0,filename) 
    return 

class Welcome(): 
    def __init__(self,master): 
     self.buttonNewTemplate = tk.Button(self.master, text = 'Create a New Template', command = self.gotoNewTemplate).place(x=100, y=250) 
    def gotoNewTemplate(self): 
     root2 = tk.Toplevel(self.master) 
     newTemplate = NewTemplate(root2) 


class NewTemplate(): 
    def __init__(self, master): 
     #Entry Windows 
     self.uploadFile = tk.Entry(self.sectionFrame2, width = 80).grid(row=4, column = 1, sticky = 'w') 
     #Buttons 
     self.buttonBrowse=tk.Button(self.sectionFrame2, text='Browse', fg='blue', command=lambda:openFile(uploadFile)).grid(row=4, column = 0, padx = 10, sticky = 'w') 

Каждый раз, когда я нажимаю кнопку обзора, второе окно разрушает меня, возвращая меня на главную страницу.

Есть ли у кого-нибудь предложения?

ответ

0

Приложение tkinter может иметь только один экземпляр Tk. Вы создаете как минимум два: один явно в openFile, а один из другого места в вашем коде либо неявно, либо явно.

Поскольку единственный способ позвонить openFile - это щелчок по кнопке, и единственный способ иметь нажатие кнопки - это кнопка, и единственный способ иметь кнопку - это уже иметь корневое окно, вам нужно чтобы удалить оператор tk.Tk().withdraw(), поскольку это создает новое корневое окно.

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