답변:
왜 수업을 사용합니까? 객체 지향 프로그래밍을 수행하는 방법을 알고 있고 사소한 GUI를 작성한다고 가정하면 작업이 더 쉬워지기 때문입니다. 객체를 사용하면 코드를 자체 포함 된 모듈 식 단위로 쉽게 나눌 수 있으며 일반적으로 코드 모듈화는 모범 사례로 간주됩니다.
GUI는 레이블, 버튼, 스크롤바, 텍스트 영역 등의 객체로만 구성되므로 GUI 프로그래밍은 객체 지향 스타일에 적합합니다. 이미 객체를 사용하고 있으므로 코드를 더 큰 객체로 구성하는 것이 좋습니다 . 도구 모음은 객체, 상태 표시 줄은 객체, 탐색 창은 객체, 주 영역은 객체, 각 노트북 탭은 객체 등입니다.
코드가 복잡하지 않은 경우에도보다 실용적인 관점에서 호출하는 함수의 정의보다 파일의 초기에 바인딩 및 콜백을 정의 할 수 있습니다.
예를 들어, 간단한 예제 (tkinter를 import tkinter as tk
(python3) 또는 import Tkinter as tk
(python2) 와 같이 가져온 것으로 가정)를 고려하십시오 .
def quit(event=None):
sys.exit()
root = tk.Tk()
label = tk.Label(root, text="Hello, world")
label.pack()
label.bind("<1>", quit)
root.mainloop()
나에게 그 코드의 흐름은 모두 잘못되었습니다. 종료하기 전에 quit 메소드를 정의해야하며, 루트 창 작성과 mainloop 호출은 다른 모든 코드로 구분됩니다.
그러나 클래스를 사용하면보다 자연스러운 순서로 코드를 작성할 수 있습니다.
class MyWindow(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
label = tk.Label(self, text="Hello, world")
label.pack()
label.bind("<1>", self.quit)
def quit(self, event=None):
sys.exit()
root = tk.Tk()
MyWindow(root).pack()
root.mainloop()
GUI의 본문은 파일 맨 위에 있으며 지원 코드는 그 아래에 있습니다. 물론 함수를 사용하여 거의 같은 것을 달성 할 수 있습니다. 내 생각에, 수업은 모든 것을 조금 더 쉽게 만듭니다.
또 다른 장점은 이제 "기본"창에 대한 내용을 변경하지 않고도 포함 창을 쉽게 변경할 수 있다는 것입니다. 즉, 기본 GUI에 테두리 또는 완전히 새로운 섹션을 추가 할 수 있지만 MyWindow 내부에서 한 줄의 코드를 건드릴 필요는 없습니다. label.pack()
UI에서 다른 모든 위젯의 명령문 및 팩 (또는 그리드) 명령문 을 변경해야하는 프로 시저 코드와 대조 하십시오.
그러나 객체 지향 접근 방식을 사용하는 것이 좋고 깨끗하며 유지 보수가 쉬운 코드를 작성하는 데 필요한 것은 아닙니다. 그것은 할 수 있을뿐만 아니라 가난한 코드로 이어질 수 있습니다. 하루가 끝나면 객체 지향 접근 방식은 도구 일뿐입니다. 사용 여부와 올바르게 사용하는지 여부는 많은 요인에 따라 다릅니다. 그래서 아주 잘 당신을 위해 할 수 있으며, 코드 는 쓰기 기능적인 스타일이 완벽하게 허용됩니다. 프로그램이 복잡해질수록 객체 지향 접근 방식으로 코드를 쉽게 구성하고 유지 관리 할 수 있습니다.
object
다른 클래스 에서 상속받을 수 있었지만 일반적으로 어쨌든 프레임을 만듭니다. 프레임에 모든 것을 넣을 경우 클래스를 프레임으로 만드는 것이 좋습니다. .
label=tk.Label()
대신에 비슷한 것을 사용하고 self.tk.Label()
있습니다. 스타일 선택입니까? 다음은 self를 사용하는 예입니다. python-textbok.readthedocs.org/en/1.0/…
parent
오히려 아닙니다 self
. 감사!