나는 객체 지향 접근법을 옹호한다. 이것은 처음부터 시작하는 템플릿입니다.
# Use Tkinter for python 2, tkinter for python 3
import tkinter as tk
class MainApplication(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.parent = parent
<create the rest of your GUI here>
if __name__ == "__main__":
root = tk.Tk()
MainApplication(root).pack(side="top", fill="both", expand=True)
root.mainloop()
주목해야 할 중요한 사항은 다음과 같습니다.
와일드 카드 가져 오기를 사용하지 않습니다. 패키지를 "tk"로 가져옵니다 tk.
. 모든 명령 앞에 접두사가 있어야합니다 . 이것은 전역 네임 스페이스 오염을 방지하고 Tkinter 클래스, ttk 클래스 또는 자체 클래스를 사용할 때 코드를 완전히 분명하게 만듭니다.
주요 응용 프로그램은 클래스 입니다. 이렇게하면 모든 콜백 및 개인 함수에 대한 개인 네임 스페이스가 제공되며 일반적으로 코드를 쉽게 구성 할 수 있습니다. 절차 스타일에서는 하향식을 코딩하고 함수를 사용하기 전에 함수를 정의하는 등의 작업을 수행해야합니다.이 방법을 사용하면 마지막 단계까지 실제로 메인 창을 만들지 않기 때문에 수행 할 수 없습니다. 나는 tk.Frame
일반적으로 프레임을 만드는 것으로 시작하기 때문에 상속을 선호 하지만 꼭 필요한 것은 아닙니다.
앱에 최상위 창이 추가로 있으면에서 각각을 별도의 클래스로 만드는 것이 좋습니다 tk.Toplevel
. 이것은 위에서 언급 한 것과 동일한 장점을 제공합니다. 창은 원자 적이며 고유 한 네임 스페이스가 있으며 코드가 잘 구성되어 있습니다. 또한 코드가 커지기 시작하면 각 모듈을 자체 모듈에 쉽게 넣을 수 있습니다.
마지막으로, 인터페이스의 모든 주요 부분에 클래스를 사용하는 것이 좋습니다. 예를 들어 도구 모음, 탐색 창, 상태 표시 줄 및 기본 영역을 사용하여 앱을 만드는 경우 해당 클래스를 각각 만들 수 있습니다. 이렇게하면 메인 코드가 매우 작고 이해하기 쉽습니다.
class Navbar(tk.Frame): ...
class Toolbar(tk.Frame): ...
class Statusbar(tk.Frame): ...
class Main(tk.Frame): ...
class MainApplication(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.statusbar = Statusbar(self, ...)
self.toolbar = Toolbar(self, ...)
self.navbar = Navbar(self, ...)
self.main = Main(self, ...)
self.statusbar.pack(side="bottom", fill="x")
self.toolbar.pack(side="top", fill="x")
self.navbar.pack(side="left", fill="y")
self.main.pack(side="right", fill="both", expand=True)
이러한 모든 인스턴스가 공통 상위를 공유하므로 상위는 효과적으로 모델 뷰 컨트롤러 아키텍처의 "제어기"부분이됩니다. 예를 들어 주 창은을 호출하여 상태 표시 줄에 무언가를 배치 할 수 self.parent.statusbar.set("Hello, world")
있습니다. 이를 통해 구성 요소 간 간단한 인터페이스를 정의 할 수있어 미니 문에 대한 연결을 유지할 수 있습니다.