Я хочу использовать локальную переменную вне функций - PullRequest
0 голосов
/ 19 февраля 2020

Я новичок в python, и я пытаюсь создать программу, которая попросит пользователя выбрать файл изображения, используя tk.filedialog, а затем выполнить некоторую работу с PIL над ним .., потому что я сделал кнопку, что on-press будет выполнять функцию (Button = tk.Button(win, text="Select File", command=buttonFunc)), а параметр command принимает только имя функции, я определил функцию, чтобы открыть диалог и позволить пользователю выбрать файл, я хотел, чтобы моя функция чтобы сохранить путь к выбранному файлу (в данном случае в переменной path ), он сохраняет путь в локальной переменной, но я хочу использовать его и вне функции, я использовал global оператор, чтобы сделать переменную глобальной, но она, кажется, не работает ..

import tkinter as tk
import turtle
from tkinter import filedialog
from tkinter import PhotoImage
import os
from tkinter import INSERT
from tkinter import TOP
from tkinter import LEFT
from tkinter import *
from PIL import Image
from PIL import ImageEnhance
import time

# Main Screen
win = tk.Tk()
win.title('Color Enhancer')
win.geometry('500x70')
# Below line of code is used to set window icon, Not really sure how it works, copied from Net and pasted here.
win.tk.call('wm', 'iconphoto', win._w, tk.PhotoImage(file='icon.gif'))
Lab = tk.Label(win, text='Welcome to Color Enhancer, This mini utility is written purely in \n'
                         'Python and can be used to change colors of given Image, Select \n'
                         ' image and see the magic.')
Lab.pack()


def buttonFunc():
    global path
    path = tk.filedialog.askopenfilenames()
    print(path)
# buttonFunc() --> Works fine if i call it here, But it opens the dialog before even the button appears..


button = tk.Button(win, text='Select File', command=buttonFunc)
button.pack(side=BOTTOM)
print(path)
win.mainloop()

Я попытался запустить код, и он выдает следующую ошибку,

Traceback (most recent call last):
  File "C:\Users\iMacPro 2K19\Desktop\Main\Python\Scratches\PIL_Edit.py", line 34, in <module>
    print(path)
NameError: name 'path' is not defined

Я знаю, что это говорит о том, что путь не определен ... но, как вы можете видеть, я определил его, а также сделал его глобальным ... Одна вещь, я хочу сказать, что если я позвоню buttonFunc() после определения .. Работает .. Но открывается диалоговое окно, прежде чем я нажимаю Кнопка e .. Есть ли другой способ решить ее, или кто-то, пожалуйста, скажите мне, где я иду не так ..

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020

Вы должны инициализировать переменную пути вне функции. Только тогда вы сможете получить к нему глобальный доступ.

path=None 
def buttonFunc():
    global path
    path="file path"
buttonFunc()
print(path)
0 голосов
/ 19 февраля 2020

path определяется только внутри функции buttonFunc(). Хорошо. Но это также означает, что переменная path НЕ УКАЗАНА до тех пор, пока для ее инициализации не будет вызван buttonFunc() fun c.

Поскольку ваш код вызывает эту забаву c только при нажатии кнопки, Переменная path по-прежнему не определена, когда вы нажимаете на оператор print(path), потому что кнопка еще не нажата, чтобы вызвать забавный c для инициации переменной.

Вы можете либо инициализировать path переменная перед вызовом print(path), или вы можете просто удалить этот вызов print(path) оттуда, потому что он на самом деле ничего не делает, и вы можете оставить его внутри своей функции, как есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...