NameError: глобальное имя 'name' не определено при использовании нескольких файлов и Tkinter - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь показать путь к файлу для доступа к файлу в поле «Запись» в Tkinter.Из-за требований этой задачи я должен определить все функции в одном файле и все поля Tkinter в другом и импортировать функции в файл Tkinter.

Я попытался поместить весь код в один файл, чтобы проверить, не вызывает ли это каких-либо проблем, и он работал нормально.Проблема в том, что задача требует, чтобы я использовал отдельные .py файлы.

def open_file():
    filePath = askopenfilename()

    with open(filePath, 'rU') as anotherFile:
        inputString = anotherFile.read()

    filePathEntry.delete(0, END)
    filePathEntry.insert(0, filePath)

И в другом файле:

from AT3_Functions_v2 import *
main = Tk()
main.geometry("600x400")
openfile = Button(main, text="Open Scoresheet", command=open_file).grid(row=0, column=0)
filePathEntry = Entry(main)
filePathEntry.grid(row=0, column=1)
mainloop()

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

NameError: global name 'filePathEntry' is not defined

1 Ответ

0 голосов
/ 12 мая 2019

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

Чтобы решить эту проблему, вам нужно передать аргумент в функцию open_file , используя функцию lambda , затем поместить переменную filePathEntry из другого файла. Я сделал для тебя.

script_one.py

from tkinter import *
from script_two to import *

main = Tk()
main.geometry("600x400")
filePathEntry = Entry(main)
filePathEntry.grid(row=0, column=1)
openfile = Button(main, text="Open Scoresheet", command=lambda: (open_file(filePathEntry))).grid(row=0, column=0)   # Passing arugument to open_file function which is in script_two.py
mainloop()

script_two.py

from tkinter import *
from tkinter import filedialog


def open_file(entry_box):   # Passing argument to access filePathEntry variable from script_one.py
    filePath = filedialog.askopenfilename()

    with open(filePath, 'rU') as anotherFile:
        inputString = anotherFile.read()

    entry_box.delete(0, END)
    entry_box.insert(0, filePath)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...