Ошибка ввода-вывода, невозможно реализовать файл в списке - PullRequest
0 голосов
/ 05 ноября 2018

Я написал этот код, и консоль выдает ошибку, я попробовал несколько способов, которые я не смог исправить, не могли бы вы объяснить, где моя ошибка. Спасибо

import os
os.chdir(r"C:\Users\Umer Selmani\Desktop\prog.practice\MP1")

import csv


with open('FoodDB.csv','r') as FDB:
    file = csv.reader(FDB)
    for line in file:
        print(line)

from tkinter import *

class Diet:
    def __init__(self):
        self.Left = Frame(root,width= 250,height=200,bg='salmon')
        self.Left.pack(side=LEFT,pady=5)

        self.labelrdL=Label(self.Left, text="Food Menu").grid(row=0)
        self.listboxrdL=Listbox(self.Left,width=30).grid(row=1)
        for q in file:
            self.listboxrdL.insert(END,q)
        self.buttonrdL=Button(self.Left, text="Continue",bg="red").grid(row=2)

root = Tk()
diet = Diet()   # Create an instance of Diet.
root.mainloop()

и здесь у вас есть ошибка,

Traceback (most recent call last):
  File "C:/Users/Umer Selmani/.PyCharmEdu2018.2/config/scratches/scratch_3.py", line 26, in <module>
    diet = Diet()   # Create an instance of Diet.
  File "C:/Users/Umer Selmani/.PyCharmEdu2018.2/config/scratches/scratch_3.py", line 21, in __init__
    for q in file:
ValueError: I/O operation on closed file.

Process finished with exit code 1

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Есть несколько вещей, над которыми вам нужно поработать.

Вы должны следовать указаниям PEP8 для именования ваших переменных. Определите все ваши импорта в начале файла. Последнее и самое важное: вы должны использовать оператор with open при обновлении списка. Помните, что with open, назначенный на open, автоматически закроет файл после завершения оператора with.

Кроме того, эта строка здесь self.listboxrdL = Listbox(self.Left,width=30).grid(row=1) не позволит вам добавлять информацию в список.

Убедитесь, что вы используете менеджер геометрии на новой строке, чтобы предотвратить проблемы, выполнив следующее:

self.listboxrdL = Listbox(self.Left,width=30)
self.listboxrdL.grid(row=1)

Код:

import os
import csv
import tkinter as tk
os.chdir(r"C:\Users\Umer Selmani\Desktop\prog.practice\MP1")

class Diet:
    def __init__(self):
        self.left = tk.Frame(root, width=250, height=200, bg='salmon')
        self.left.pack(side="left", pady=5)

        tk.Label(self.left, text="Food Menu").grid(row=0)
        self.listbox_rdl = tk.Listbox(self.left, width=30)
        self.listbox_rdl.grid(row=1)

        with open('FoodDB.csv', 'r') as fdb:
            file = csv.reader(fdb)
            for q in file:
                self.listbox_rdl.insert("end", q)

        tk.Button(self.left, text="Continue", bg="red").grid(row=2)

root = tk.Tk()
diet = Diet()
root.mainloop()
0 голосов
/ 05 ноября 2018

Ваш 'с открытым' автоматически закрывает файл. Следовательно, вы получаете ошибку.

Вместо with open('FoodDB.csv','r') as FDB: попробуйте FDB = open('FoodDB.csv','r')

Не забудьте закрыть файл вручную, как только вы закончите.

FDB.close()

Полное решение должно быть примерно таким:

import os
os.chdir(r"C:\Users\Umer Selmani\Desktop\prog.practice\MP1")

import csv


FDB = open('FoodDB.csv','r')
file = csv.reader(FDB)
#for line in file:
   #print(line)

from tkinter import *

class Diet:
    def __init__(self):
        self.Left = Frame(root,width= 250,height=200,bg='salmon')
        self.Left.pack(side=LEFT,pady=5)

        self.labelrdL=Label(self.Left, text="Food Menu").grid(row=0)
        self.listboxrdL=Listbox(self.Left,width=30).grid(row=1)
        for q in file:
            self.listboxrdL.insert(END,q)
        self.buttonrdL=Button(self.Left, text="Continue",bg="red").grid(row=2)

root = Tk()
diet = Diet()   # Create an instance of Diet.
root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...