Понятия не имею, что является причиной этой ошибки "AttributeError: '_io.TextIOWrapper' объект не имеет атрибута 'tk'" - PullRequest
0 голосов
/ 22 октября 2019

Код продолжает выдавать AttributeError: '_io.TextIOWrapper' object has no attribute 'tk', и я не могу понять, что его вызывает, я просмотрел другие посты, и ничто не помогло мне понять, что происходит.

Ниже приводитсякод, который его вызывает.

    def showhwk(lesson, popup):
        lesson = lesson.replace("/","")
        popup.withdraw()
        show = Tk()
        show.title("Homework marks for "+lesson)
        show.geometry("+{}+{}".format(positionRight, positionDown))
        try:
            with open(lesson+".csv", "r") as show:
                csvlist = list(csv.reader(show))
            for label in range (len(csvlist)):
                Label(show, text = "hello").grid(row = label)
        except FileNotFoundError:
            show.title("Error!")
            error = Label(show, text = "Homework file was not found")
            error.grid(row = 0)

        def goback3(show):
            popup.deiconify()
            show.withdraw()

        returnbut = Button(show, text = "Return", bg = "#79838e", command = lambda: goback3(show)).grid(row = 40, sticky = W+E)

Это полная ошибка:

Traceback (most recent call last):
  File "C:\Users\Olek\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py", line 1883, in __call__
    return self.func(*args)

  File "D:\Desktop\Folders\Python\Coursework\coursework code main.py", line 242, in <lambda>

show = Button(popup, text = "Show homework marks", bg = "green", command = lambda: showhwk(lesson, popup))

  File "D:\Desktop\Folders\Python\Coursework\coursework code main.py", line 278, in showhwk

Label(show, text = "hello").grid(row = label)

  File "C:\Users\Olek\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py", line 3143, in __init__

Widget.__init__(self, master, 'label', cnf, kw)

  File "C:\Users\Olek\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py", line 2561, in __init__

BaseWidget._setup(self, master, cnf)

  File "C:\Users\Olek\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py", line 2530, in _setup

self.tk = master.tk

AttributeError: '_io.TextIOWrapper' object has no attribute 'tk'

1 Ответ

0 голосов
/ 22 октября 2019

Сначала вы определяете show следующим образом:

show = Tk()

Позже вы переопределяете show как дескриптор открытого файла с помощью этого оператора:

with open(lesson+".csv", "r") as show:

Затем выпопробуйте использовать show в качестве мастера для виджета здесь:

Label(show, text = "hello").grid(row = label)

Поскольку show больше не является виджетом, его нельзя использовать в качестве мастера для другого виджета. И именно поэтому вы получаете ошибку tkinter.

...