Приложение с графическим интерфейсом показывает файл, не найденный в ошибке каталога

#python #csv #user-interface #python-idle

Вопрос:

Я создал графический интерфейс для программы на python, который позволяет мне читать csv-файл и отображать данные в графическом интерфейсе. Графический интерфейс отлично работает, когда я запускаю программу в режиме ожидания. Однако, когда я пытаюсь запустить файл программы в том виде, в каком он есть, из проводника Windows, он показывает следующую ошибку.

 Exception in Tkinter callback
Traceback (most recent call last):
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.9_3.9.1776.0_x64__qbz5n2kfra8p0libtkinter__init__.py", line 1892, in __call__
    return self.func(*args)
  File "C:Pythongui1.py", line 43, in find_result
    with open("RESULTS.csv") as a:
FileNotFoundError: [Errno 2] No such file or directory: 'RESULTS.csv'
 

Это программный код:

 import tkinter as tk
import csv


root=tk.Tk()
root.title('Results')

tk.Label(root,text="Enter your Roll Number:").grid(row=1,column=1,sticky=tk.W)

tk.Label(root,text="Name:").grid(row=4,column=1,sticky=tk.W)

tk.Label(root,text="Total (Core 5 Subjects):").grid(row=5,column=1,sticky=tk.W)

tk.Label(root,text="Total (Best 5 Subjects):").grid(row=6,column=1,sticky=tk.W)

tk.Label(root,text="Percentage:").grid(row=7,column=1,sticky=tk.W)

tk.Label(root,text="Rank:").grid(row=8
                                 ,column=1,sticky=tk.W)

rno=tk.StringVar()


name_=tk.StringVar()
t1_=tk.StringVar()
t2_=tk.StringVar()
perc_=tk.StringVar()
rank_=tk.StringVar()
                   
tk.Entry(root, textvariable=rno,justify=tk.RIGHT).grid(row=1,column=2,padx=3,pady=3)
def find_result():
    

    tk.Label(root,textvariable=name_,justify=tk.RIGHT).grid(row=4,column=2,sticky=tk.E)

    tk.Label(root,textvariable=t1_,justify=tk.RIGHT).grid(row=5,column=2,sticky=tk.E)

    tk.Label(root,textvariable=t2_,justify=tk.RIGHT).grid(row=6,column=2,sticky=tk.E)

    tk.Label(root,textvariable=perc_,justify=tk.RIGHT).grid(row=7,column=2,sticky=tk.E)

    tk.Label(root,textvariable=rank_,justify=tk.RIGHT).grid(row=8,column=2,sticky=tk.E)

    with open("RESULTS.csv") as a:
        reader=csv.reader(a)
        for i in reader:
            if i!=[]:
                if i[0]==rno.get():
                    name=i[1][2:]
                    t1=i[19]
                    t2=i[20]
                    perc=i[21]
                    rank=i[22]

                    name_.set(name)
                    t1_.set(t1)
                    t2_.set(t2)
                    perc_.set(perc)
                    rank_.set(rank)


tk.Button(root, text="Check your Result",command=find_result).grid(row=2,column=2)

root.mainloop()
 

Открытие программы в режиме ожидания:

Открытие программы в режиме ожидания

Открытие программы через Проводник:

Открытие программы через проводник

Ответ №1:

open("RESULTS.csv") ищет этот файл в текущем рабочем каталоге, что бы это ни было. Это должно отличаться для двух разных способов выполнения кода. Выполните одно из следующих действий.

  1. Укажите open абсолютный путь к файлу вместо относительного. Если вам известно расположение файла данных относительно расположения файла программы, используйте __file__ в качестве отправной точки файл , в котором указано местоположение файла программы. Примечание 1: что при работе в интерактивном режиме, без запуска файла, __file__ не существует. Примечание 2: Если вы не понимаете «абсолютный путь», выполните поиск в Интернете.
  2. Явно установите текущий каталог в тот, в котором находится файл с. os.chdir(path) где путь абсолютен, а не относителен. Это более полезно, если вы открываете несколько файлов в этом каталоге.