Ошибка с grid_forget (), где он не может найти атрибут - PullRequest
0 голосов
/ 01 мая 2019

Я делаю небольшой проект, используя tkinter, чтобы иметь окно с изменяющимся средним кадром

    import tkinter as tk
    root = tk.Tk()


    def input_data():
      personal_data_frame.grid_forget()
      input_data_frame = ttk.LabelFrame(root, weight=0)
      input_data_frame.grid(row=1, column=0, sticky="NSWE", weight=1)

    def personal_data():
      personal_data_frame = ttk.Frame(root, weight=1)
      personal_data_frame.grid(row=1, column=0)
    personal_data()
    input_data()

Так что для меня это может не показаться, чтобы удалить кадр личных данных (у меня есть некоторые виджеты вкадр, который я просто вынул для простоты)

Я получаю сообщение об ошибке: «AttributeError: у объекта нет атрибута grid_forget». Я почти полностью новичок в tkinter, но не планирую отказываться от

1 Ответ

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

В вашем коде много ошибок, и он не выдает ошибку AttributeError: object has no attribute grid_forget

В моем примере нет проблем с удалением Frame. Он присваивает Frame глобальной переменной, а затем другая функция получает доступ к этому Frame и может удалить его.

import tkinter as tk
import tkinter.ttk as ttk

def input_data():
    personal_data_frame.grid_forget()
    input_data_frame = ttk.LabelFrame(root)#, weight=0) # ERROR
    input_data_frame.grid(row=1, column=0, sticky="NSWE")#, weight=1) # ERROR

def personal_data():
    global personal_data_frame

    personal_data_frame = ttk.Frame(root)#, weight=1) # ERROR
    personal_data_frame.grid(row=1, column=0)

root = tk.Tk()
personal_data()
input_data()
root.mainloop()

У вас могут возникнуть проблемы AttributeError: object has no attribute grid_forget, если вы назначите что-то другое, чем виджет tkinter для personal_data_frame - т.е. строка object() и т. д.

Этот код показывает ошибку AttributeError: object has no attribute grid_forget, потому что я присваиваю object() personal_data_frame после personal_data(), а object() не имеет метода grid_forget()

import tkinter as tk
import tkinter.ttk as ttk

def input_data():
    personal_data_frame.grid_forget()
    input_data_frame = ttk.LabelFrame(root)#, weight=0) # ERROR
    input_data_frame.grid(row=1, column=0, sticky="NSWE")#, weight=1) # ERROR

def personal_data():
    global personal_data_frame

    personal_data_frame = ttk.Frame(root)#, weight=1) # ERROR
    personal_data_frame.grid(row=1, column=0)


root = tk.Tk()
personal_data()
personal_data_frame = object()
input_data()
root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...