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