복붙노트

[PYTHON] Tkinter 위젯이 None으로 저장된 이유는 무엇입니까? (AttributeError : 'NoneType'객체 ...) (TypeError : 'NoneType'객체 ...) [duplicate]

PYTHON

Tkinter 위젯이 None으로 저장된 이유는 무엇입니까? (AttributeError : 'NoneType'객체 ...) (TypeError : 'NoneType'객체 ...) [duplicate]

#AttributeError: 'NoneType' object has no attribute ... Example

try:                        # In order to be able to import tkinter for
    import tkinter as tk    # either in python 2 or in python 3
except ImportError:
    import Tkinter as tk

root = tk.Tk()

widget = tk.Label(root, text="Label 1").grid()
widget.config(text="Label A")

root.mainloop()

위의 코드는 오류를 생성합니다.

마찬가지로 코드 조각 :

#TypeError: 'NoneType' object does not support item assignment Example

try:                        # In order to be able to import tkinter for
    import tkinter as tk    # either in python 2 or in python 3
except ImportError:
    import Tkinter as tk

root = tk.Tk()

widget = tk.Button(root, text="Quit").pack()
widget['command'] = root.destroy

root.mainloop()

오류가 발생합니다.

그리고 두 경우 모두 :

>>>print(widget)
None

그 이유는 위젯이 None으로 저장된 이유는 무엇입니까? 아니면 위젯 구성시 위의 오류가 발생하는 이유는 무엇입니까?

이 질문은 이에 근거하여 주제에 대한 많은 관련적이고 반복적 인 질문에 대한 일반 대답을 요청합니다. 수정 거부에 대해서는이 부분을 참조하십시오.

해결법

  1. ==============================

    1.geometry manager는 grid, pack, place를 리턴하므로 None으로 저장되므로 widget은 위젯 인스턴스를 생성하는 라인과는 별도의 라인에서 호출되어야합니다 :

    geometry manager는 grid, pack, place를 리턴하므로 None으로 저장되므로 widget은 위젯 인스턴스를 생성하는 라인과는 별도의 라인에서 호출되어야합니다 :

    widget = ...
    widget.grid(..)
    

    또는:

    widget = ...
    widget.pack(..)
    

    또는:

    widget = ...
    widget.place(..)
    

    특히 두 번째 코드 스 니펫의 경우 다음과 같습니다.

    widget = tkinter.Button(...).pack(...)
    

    다음과 같이 두 줄로 구분해야합니다.

    widget = tkinter.Button(...)
    widget.pack(...)
    

    정보 :이 답변은 복사 한 대부분의 부분이 아니라면이 답변을 기반으로합니다.

  2. from https://stackoverflow.com/questions/47619074/why-is-tkinter-widget-stored-as-none-attributeerror-nonetype-object-ty by cc-by-sa and MIT license