2015-09-21 4 views
1

Я только что начал с программирования GUI в Python 2.7 с Tkinter.Python: виджет кнопки в Tkinter

Я хочу иметь кнопку Обзор, который при нажатии открывается Windows File Explorer и возвращает путь к файлу, выбранному для переменной. Я хочу использовать этот путь позже.

Я следую приведенному коду here. Он выводит окно, отображающее 5 кнопок, но кнопки ничего не делают. При нажатии первой кнопки он не открывает выбранный файл.

Аналогично, при нажатии второй кнопки вызывается функция askopenfilename(self) и она должна возвращать имя файла. Как я уже упоминал, мне нужно это имя позже.

Как получить значение, возвращаемое функцией, в какую-то переменную для будущего использования?

ответ

1

Нет смысла использовать return внутри обратного вызова к кнопке. Он никуда не вернется. Способ сделать данные обратного вызова - хранить его в глобальной переменной или переменной экземпляра, если вы используете классы.

def fetchpath(): 
    global filename 
    filename = tkFileDialog.askopenfilename(initialdir = 'E:') 

FWIW (и не имеет отношения к вопросу): вы делаете очень распространенную ошибку. В python, когда вы делаете foo=bar().baz(), foo принимает значение в baz(). Таким образом, когда вы это делаете:

button = Button(...).pack() 

button примет значение pack() которая всегда возвращает None. Вы должны отделить создание виджета от макета виджетов, если вы хотите сохранить фактическую ссылку на создаваемый виджет. Даже если вы этого не сделаете, это хорошая практика для разделения этих двух.

+0

Я исправил ошибку 'pack'. Я все еще не могу использовать 'global filename'' NameError: global name 'filename' не определен' – Nancy

+0

@Nancy: У вас должны быть другие ошибки в вашей программе. Вы не должны получать эту ошибку, но, не видя кода, я даже не могу догадаться. –

+0

Моя ошибка. Получилось это сейчас. – Nancy

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