2013-10-09 3 views
1

У меня возникли проблемы с возвратом переменной из команды кнопки TkInter. Это вот мой код:Команда кнопки Python TkInter Return

class trip_calculator: 

    def gui(self): 

     returned_values = {} 

     def open_file_dialog(): 
      returned_values['filename'] = askopenfilename() 

     root = Tk() 
     Button(root, text='Browse', command= open_file_dialog).pack() 

     filepath = returned_values.get('filename') 

     root.mainloop() 

     return filepath 

     root.quit() 

Я просто хочу вернуть путь к файлу TXT. Окно TkInter открыто, и я могу просматривать и выбирать файл, но он не возвращает путь. Я схожу с ума!

def __init__(self): 

     file = self.gui() 

Любые идеи? Огромное спасибо!

+0

Время между созданием кнопки и строкой после этого, где вы назначаете «путь к файлу», составляет примерно тысячную долю секунды. Пользователь должен иметь _very_ быстрые рефлексы для навигации по диалогу открытого файла в этом маленьком окне возможностей :-) Я немного упрощаю, но суть моей шутки заключается в том, что не полагайтесь на ввод пользователя, присутствующий в любом до 'mainloop'. – Kevin

ответ

2

Как ваш код в настоящее время, filepath присваивается его значение, прежде чем ваше окно даже появится пользователю. Таким образом, словарь не может содержать имя файла, которое пользователь в конечном итоге выбирает. Самое простое решение - поставить filepath = returned_values.get('filename') после mainloop, поэтому он не будет назначен, пока mainloop не закончится, когда пользователь закроет окно.

from Tkinter import * 
from tkFileDialog import * 

class trip_calculator: 

    def gui(self): 

     returned_values = {} 

     def open_file_dialog(): 
      returned_values['filename'] = askopenfilename() 

     root = Tk() 
     Button(root, text='Browse', command= open_file_dialog).pack() 


     root.mainloop() 

     filepath = returned_values.get('filename') 
     return filepath 

     root.quit() 

print(trip_calculator().gui()) 
+0

Эй, Кевин, спасибо. Я получаю то, что я делаю неправильно, однако, назначая «путь к файлу» после того, как mainloop не поможет. Если я просто распечатаю путь к файлу перед возвратом, он не распечатает его. У меня такое ощущение, что программа не оставляет open_file_dialog() вообще? –

+0

Игнорировать мой комментарий, теперь я понимаю .. ;-) Еще раз спасибо! –

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