Python Tkinter 프로젝트 [단계별 설명]
게시 됨: 2020-09-14Python에서 GUI에 대해 배우는 것은 상당히 어려울 수 있습니다. 우리가 당신의 뒤에 있기 때문에 걱정하지 마십시오! 이 기사에서는 Python GUI 프로젝트에서 효율적으로 작업할 수 있도록 Tkinter 튜토리얼을 공유했습니다. 이 튜토리얼을 완료하면 Python Tkinter 프로젝트를 생성하기 위한 빌딩 블록에 익숙해질 것입니다. 파이썬에 대한 더 많은 전문 지식을 얻으려면 데이터 과학 프로그램을 확인하십시오.
또한 모든 단계에 대한 코드를 공유했습니다. 그러나 작동 방식을 이해한 경우에만 복사하여 붙여넣는 것이 좋습니다. 그렇지 않으면 별로 쓸모가 없을 것입니다.
목차
Tkinter는 무엇입니까?
Tkinter는 Tk GUI 툴킷을 사용하기 위한 Python용 패키지입니다. Python을 통해 GUI 프로그램을 만드는 데 Tkinter를 사용할 수 있습니다. Tkinter는 많은 프로그램을 생성할 수 있지만 고급 구현을 위해 모듈을 사용해야 할 수도 있습니다. Python Tkinter 프로젝트에서 작업하기 전에 Tkinter의 기본 사항에 익숙해야 합니다.
Tkinter의 Hello World 프로그램
다음은 Tkinter의 hello world 프로그램의 예입니다.
tkinter를 tk로 가져오기
클래스 애플리케이션(tk.Frame):
def __init__(자신, 마스터=없음):
super().__init__(마스터)
self.master = 마스터
self.pack()
self.create_widgets()
def create_widgets(자체):
self.hi_there = tk.Button(self)
self.hi_re[“text”] = “Hello World\n(클릭)”
self.hi_there[“명령”] = self.say_hi
self.hi_re.pack(측면="상단")
self.quit = tk.Button(self, text=”QUIT”, fg=”red”,
명령=self.master.destroy)
self.quit.pack(측면="하단")
def say_hi(자신):
print("안녕하세요, 여러분!")
루트 = tk.Tk()
앱 = 애플리케이션(마스터=루트)
app.mainloop()
Tkinter의 기하학 관리자
Python Tkinter 프로젝트에서 작업하는 동안 알아야 할 또 다른 주요 개념은 기하학 관리자입니다. 지오메트리 관리자를 사용하지 않으면 위젯이 화면에 나타나지 않습니다. 지오메트리 관리자를 추가할 수 있는 기본적으로 세 가지 방법이 있습니다.
그리드
부모에 그리드를 추가하고 그에 따라 위젯을 표시할 수 있습니다. 그리드에는 위젯의 길이와 높이를 측정하기 위한 행과 열이 있습니다.
팩
이 메서드는 위젯이 부모 내에서 자신을 압축하도록 지시합니다. 부모의 자식 위젯 목록에만 위젯을 추가합니다. 간단히 말해서 상위 위젯에 배치하기 전에 블록에 추가합니다.
장소
이 메소드는 상위 위젯에 따라 특정 위치에 위젯을 배치합니다.
아래 튜토리얼에서는 위젯의 위치를 처리하기 위해 팩 관리자를 사용했습니다. 그렇기 때문에 이러한 개념에 대해 잘 알고 있는 것이 가장 좋습니다. 그것은 당신이 우리 프로젝트의 작업을 더 잘 이해하는 데 도움이 될 것입니다.
확인: 초보자를 위한 42가지 흥미로운 Python 프로젝트 아이디어 및 주제
Python으로 GUI 구축하기 (Tkinter Tutorial)
1단계: 모듈 가져오기
애플리케이션 작업을 시작하려면 먼저 필요한 모듈을 가져와야 합니다. 네임스페이스에서 모듈을 가져와서 그렇게 할 수 있습니다. 이렇게 하면 상수와 클래스를 한정하는 대신 이름으로 사용할 수 있습니다. 즉, "TkinterLabel"로 한정하는 대신 이름을 사용하여 "Label"을 사용할 수 있습니다. 그것은 일을 상대적으로 쉽게 만들고 모든 클래스와 상수를 검증하는 것이 매우 번거로울 수 있으므로 많은 시간을 절약할 수 있습니다. 다음 코드를 사용하여 모듈을 가져옵니다.
>>> Tkinter에서 가져오기 *
Python이 시스템의 Tk(또는 Tcl)에 연결되어 있지 않거나 시스템에 Tk(또는 Tcl)가 설치되어 있지 않은 경우 이 섹션에 오류 메시지가 표시됩니다. 이 문제를 해결하려면 시스템 관리자가 액세스해야 합니다. 동일한 작업을 수행하여 이 문제를 해결했는지 확인하십시오.
반면에 이 섹션에 오류 메시지가 표시되지 않으면 다음 단계로 이동하여 창을 만들 수 있습니다.
>>> 승리 = Tk()
창에 "win"이라는 변수를 할당했습니다. 위의 코드를 구현하면 화면에 작은 창이 나타납니다. 제목 표시줄에 "tk"가 표시되어야 합니다.
이는 이 단계를 성공적으로 완료했으며 이제 Python에서 GUI 빌드를 시작할 수 있음을 의미합니다.
2단계: 버튼 추가
이제 Tkinter를 실행했으므로 프로그램에 버튼을 추가할 수 있습니다. 버튼은 GUI 프로그램에서 가장 간단한 부분이므로 다음과 같이 시작하겠습니다.
>>> b1 = 버튼(승리, 텍스트="하나")
>>> b2 = 버튼(승리, 텍스트="2")
마지막 섹션에서 만든 창은 지금 만든 버튼의 부모입니다. 더 많은 Python Tkinter 프로젝트에서 작업할 때 프레임이 다른 클래스의 부모 역할도 할 수 있음을 알게 될 것입니다. 이제 이 코드를 구현하면 이상한 현상이 나타납니다. 버튼이 창에 나타나지 않습니다!
프로그램에 그리드와 팩을 추가해야 하기 때문입니다. 이를 지오메트리 관리자라고 하며 이 기사의 앞부분에서 논의했습니다. 다음 섹션에서 팩 관리자를 추가합니다.
3단계: 팩 관리자 구현
우리는 우리의 버튼을 부모 위젯에 추가하기 위해 pack 메소드를 사용할 것입니다. 팩 관리자를 사용하면 자식 위젯을 포장하려는 상위 위젯의 어느 쪽에 대해 말할 수 있습니다. TOP, RIGHT, BOTTOM, LEFT를 함수로 사용할 수 있습니다. 면을 지정하지 않으면 프로그램은 기본적으로 TOP을 선택합니다. 먼저 팩 관리자를 추가해 보겠습니다.
>>> b1.pack()
>>> b2.pack()
첫 번째 버튼(코드의 첫 번째 줄)을 추가하면 창이 버튼의 크기로 축소되는 것을 알 수 있습니다. 마찬가지로 두 번째 버튼(코드의 두 번째 줄)을 추가하면 해당 버튼의 크기에 따라 창이 확장됩니다. 어느 쪽을 포장해야 하는지 지정하지 않았기 때문에 창은 버튼을 수직 순서로 배치했습니다. 아래 코드를 사용하여 왼쪽에 포장해 보겠습니다.
>>> b2.pack(측면=LEFT)
>>> b1.pack(측면=LEFT)
우리는 위젯을 이 두 가지 순서(가로 및 세로)로만 배치해야 할 때 주로 팩 관리자를 사용합니다. 다른 유형의 위젯 배치의 경우 그리드 방법 또는 배치 방법을 사용합니다. 'padx' 또는 'pady' 기능을 사용하여 버튼과 창 사이에 공간을 추가할 수 있습니다. 'padx' 함수는 위젯의 X축(좌우)에 패딩을 추가하고, 'pady' 함수는 디바이스의 Y축(상하)에 패딩을 추가합니다.
>>> b1.pack(side=LEFT, padx=10)
>>> b2.pack(side=LEFT, padx=10)
위젯의 패딩을 실험해 볼 것을 권장합니다. 위젯 배치를 수정할 수 있는 다양한 방법을 이해하는 데 도움이 됩니다. 패딩은 마스터하기 어려운 개념이므로 다음 섹션으로 이동하기 전에 시도해 보는 것이 가장 좋습니다.
4단계: 그리드 관리자
Tkinter에서 또 다른 인기 있는 기하학 관리자는 그리드 관리자입니다. 이 기사의 앞부분에서 논의한 것처럼 그리드 관리자를 사용하면 부모를 행과 열로 나눌 수 있습니다. 부모 그리드의 셀에 자식 위젯을 배치할 수 있습니다. 요구 사항에 따라 모든 열과 행의 너비와 길이를 수정할 수 있습니다. 모든 열의 너비가 같을 필요는 없습니다. 마찬가지로 모든 행의 높이가 같을 필요는 없습니다. 따라서 그리드 관리자를 사용하면 위젯의 모양과 배치를 편집할 때 보다 창의적인 자유를 얻을 수 있습니다.
그리드 관리자를 테스트하기 위해 이전에 만든 것과 동일한 버튼으로 새 창을 만듭니다. 그러나 2×2 그리드에 버튼을 추가합니다.
>>> 승리 = Tk()
>>> b1 = 버튼(승리, 텍스트="하나")
>>> b2 = 버튼(승리,텍스트=”2”)
>>> b1.grid(행=0, 열=0)
>>> b2.grid(행=1, 열=1)
우리 프로그램에서 일부 셀이 비어 있음을 알 수 있습니다. 0행, 1열(또는 1행과 0열)에 아무 것도 추가하지 않았기 때문입니다. 우리는 흥미로운 것을 보기 위해 새로운 위젯을 시도할 것입니다:
>>> l = Label(win, text="이것은 레이블입니다")
>>> l.grid(행=1, 열=0)
위의 코드를 추가하면 두 번째 버튼이 텍스트를 수용하기 위해 오른쪽으로 이동하는 것을 알 수 있습니다. 여러 위젯이 있는 그리드 관리자를 사용하여 작동 방식을 확인하는 것이 가장 좋습니다.
필독: 인도의 Django 개발자 급여
5단계: 레이아웃 개선
이 섹션에서는 frame이라는 새 위젯을 사용해 볼 것입니다. 프레임은 다른 위젯을 포함하기 위한 것입니다. 여러 위젯을 프레임에 묶거나 그리드를 사용하여 같은 프레임에 배치할 수 있습니다. 다른 프레임을 단일 프레임으로 묶을 수도 있습니다. 이 기능을 사용하면 GUI 프로그램에 대한 고급 레이아웃을 만들 수 있습니다. 예를 들어, 연속된 프레임에 세 개의 버튼을 추가합니다. 버튼을 가로로 추가한 다음 레이블을 프레임과 함께 세로로 묶습니다.
>>> 승리 = Tk()
>>> f = 프레임(승리)

>>> b1 = 버튼(f, “하나”)
>>> b2 = 버튼(f, “2”)
>>> b3 = 버튼(f, “3”)
>>> b1.pack(측면=LEFT)
>>> b2.pack(측면=LEFT)
>>> b3.pack(측면=LEFT)
>>> l = Label(win,"이 레이블은 모든 버튼 위에 있습니다.")
>>> l.pack()
>>> f.pack()
이 기사의 앞부분에서 논의한 것처럼 place 메서드를 지오메트리 관리자로 사용할 수도 있습니다. place 메소드를 사용하면 창이나 프레임 내의 특정 위치에 위젯을 배치할 수 있습니다. 그러나 프로그램의 응답성을 제한하기 때문에 place 메서드를 자주 사용하지 않는 것이 좋습니다.
그리드 기능을 사용하면 위젯 배치를 지정하기 위해 지도 좌표(S, N, W, SW, NE 등)를 사용할 수 있는 'sticky' 매개변수를 사용할 수 있습니다. 다음 섹션으로 이동하기 전에 아직 논의한 기능을 이해하고 있는지 확인하십시오. 그리드와 프레임 기능을 함께 테스트하여 다른 Python GUI 프로젝트에서 사용할 수 있는 방법을 확인하십시오.
6단계: 버튼을 유용하게 만들기
지금까지 만든 버튼을 클릭했다면 응답하지 않는(아무것도 하지 않음) 알아차렸을 것입니다. 클릭하면 눌러지고 그 위에 마우스를 가져가면 강조 표시되지만 어떤 기능도 수행하지 않습니다. 버튼이 특정 기능을 수행하도록 하려면 '구성' 기능을 사용해야 합니다.
위젯을 생성하는 동안 전달하기 위해 위젯의 'configure' 메소드에 모든 키워드 인수를 전달할 수 있습니다. 다음은 예입니다.
>>> b1.configure(텍스트="우노")
'command' 매개변수는 버튼을 생성하거나 'configure'를 추가할 때 버튼을 콜백 기능에 연결합니다. 작동 방식을 이해하기 위해 메시지를 출력하는 함수를 생성합니다.
>>> def but1():
... print("버튼 하나가 눌렸습니다.")
…
>>> b1.configure(command=but1)
따라서 해당 버튼을 클릭하면 메시지가 인쇄됩니다.
7단계: 항목 위젯 추가
입력 위젯을 사용하면 사용자가 프로그램에 텍스트를 입력할 수 있습니다. 그러나 버튼으로 했던 것처럼 항목 위젯이 작동하도록 만들어야 합니다. 항목 위젯은 텍스트를 검색(및 설정)해야 합니다. 입력 위젯이 이 기능을 수행하려면 Tkinter 객체 'StringVar'를 사용해야 합니다. 'StringVar' 객체는 텍스트를 문자열 형태로 보유하고 get을 통해 읽을 수 있도록 합니다.
항목 위젯을 테스트하기 위해 새 창을 만듭니다.
>>> 승리 = Tk()
>>> v = StringVar()
>>> e = 항목(승리,텍스트변수=v)
>>> e.pack()
이제 "이것은 테스트입니다"를 항목으로 추가하고 StringVar를 통해 동일한 항목을 검색해 보겠습니다.
>>> v.get()
"이건 테스트야"
이제 텍스트를 StringVar로 설정하고 위젯에 표시할 수 있습니다.
>>> v.set("프로그램에서 설정한 것입니다.")
추가 위젯: 목록 상자 위젯
항목 위젯 외에도 목록 상자 위젯을 추가할 수 있습니다. 목록 상자 위젯을 사용하면 사용자가 메뉴에서 항목을 선택할 수 있습니다. 목록 상자 위젯을 사용해 보기 위해 새 창을 만들 것입니다.
>>> 승리 = Tk()
>>> lb = 목록 상자(승리, 높이=3)
>>> lb.pack()
>>> lb.insert(END, "첫 번째 항목")
>>> lb.insert(END, "두 번째 항목")
>>> lb.insert(END, "세 번째 항목")
>>> lb.insert(END, "네 번째 항목")
목록의 처음, 중간, 끝에 항목을 삽입할 수 있습니다. 삭제할 수도 있습니다. 목록에 항목이 너무 많으면 스크롤바를 추가할 수 있습니다.
>>> sb = 스크롤바(승리, 방향=수직)
>>> sb.pack(측면=왼쪽, 채우기=Y)
스크롤바가 작동하도록 하려면 콜백 기능을 사용해야 합니다.
>>> sb.configure(명령=lb.yview)
>>> lb.configure(yscrollcommand=sb.set)
curselection 메서드는 목록 상자에서 항목을 선택하면 항목을 반환합니다. 항목을 선택하지 않으면 빈 튜플을 반환합니다.
8단계: 최종 단계
Tkinter 튜토리얼에서 배운 모든 내용을 사용하여 전화 목록 편집기를 만들 것입니다.
총 코드
#!/usr/bin/env python3
tkinter 가져오기에서 *
전화에서 가져오기 *
def which_selected():
print("{0}에서".format(select.curselection()))
반환 int(select.curselection()[0])
def add_entry():
phonelist.append([fnamevar.get(), lnamevar.get(), phonevar.get()])
set_select()
def update_entry():
전화 목록[ which_selected()] = [fnamevar.get(),
lnamevar.get(),
phonevar.get()]
def delete_entry():
전화 목록[ which_selected()]
set_select()
def load_entry():
fname, lname, 전화 = 전화 목록[ which_selected()]
fnamevar.set(fname)
lnamevar.set(이름)
phonevar.set(전화)
def make_window():
전역 fnamevar, lnamevar, phonevar, 선택
승리 = Tk()
프레임1 = 프레임(승리)
프레임1.팩()
Label(frame1, text="이름").grid(row=0, column=0,sticky=W)
fnamevar = StringVar()
fname = 항목(frame1, textvariable=fnamevar)
fname.grid(행=0, 열=1, 고정=W)
Label(frame1, text="성").grid(row=1, column=0,sticky=W)
lnamevar = StringVar()
lname = 항목(frame1, textvariable=lnamevar)
lname.grid(행=1, 열=1, 고정=W)
Label(frame1, text=”Phone”).grid(row=2, column=0,sticky=W)
phonevar = StringVar()
전화 = 항목(frame1, textvariable=phonevar)
phone.grid(행=2, 열=1, 고정=W)
frame2 = Frame(win) # 버튼 행
프레임2.팩()
b1 = 버튼(frame2, text="추가", command=add_entry)
b2 = 버튼(frame2, text=”업데이트”, command=update_entry)
b3 = 버튼(frame2, text=”삭제”, command=delete_entry)
b4 = 버튼(frame2, text="Load ", command=load_entry)
b5 = 버튼(frame2, text="새로고침", command=set_select)
b1.pack(측면=LEFT)
b2.pack(측면=LEFT)
b3.pack(측면=LEFT)
b4.pack(측면=LEFT)
b5.pack(측면=LEFT)
frame3 = Frame(win) # 이름 선택
frame3.pack()
scroll = Scrollbar(frame3, 방향=수직)
select = Listbox(frame3, yscrollcommand=scroll.set, 높이=6)
scroll.config(command=select.yview)
scroll.pack(측면=오른쪽, 채우기=Y)
select.pack(side=LEFT, 채우기=BOTH, 확장=1)
반환 승리
def set_select():
phonelist.sort(키=람다 레코드: 레코드[1])
select.delete(0, 끝)
fname, lname, phonelist의 전화:
select.insert(END, "{0}, {1}".format(lname, fname))
승리 = make_window()
set_select()
win.mainloop()
전화 목록은 다음과 같습니다.
전화번호부 = [['크리스', '마이어스', '241-343-4349'],
['로버트', '스미스', '202-689-1234'],
['자넷', '존스', '609-483-5432'],
['랄프', '반하트', '215-683-2341'],
['에릭', '넬슨', '571-485-2689'],
['포드', '프리펙트', '703-987-6543'],
['메리', '지글러', '812-567-8901'],
['밥', '스미스', '856-689-1234']]
여기에서 공유한 프로그램이 한 예입니다. 이 Tkinter 튜토리얼에서 논의한 기능으로 프로그램을 만들 수 있습니다. 위의 프로그램에는 변경 사항을 저장할 수 있는 옵션이 없는 등 몇 가지 기능이 없습니다. 이 작업을 수행할 수 있는 버튼을 만들어 저장 기능을 직접 추가할 수 있습니다.
반드시 읽어야 함: Python 자습서의 Markov Chain
Python 및 Python GUI 프로젝트에 대해 자세히 알아보기
Python Tkinter 프로젝트에서 작업하는 것은 당신이 무엇을 하고 있는지 안다면 꽤 재미있을 수 있습니다. 그들은 또한 당신의 강점(그리고 약점)을 이해하는 좋은 방법입니다. Python에 대해 자세히 알아볼 수 있습니다. 블로그로 이동하는 것이 좋습니다. 다음은 더 읽을 수 있는 몇 가지 리소스입니다.
- 10 파이썬 GUI 프로젝트
- 파이썬에서 챗봇을 만드는 방법
- 42 파이썬 프로젝트 아이디어
이 프로젝트에 대해 어떻게 생각하십니까? 다른 Python Tkinter 프로젝트에서 작업한 적이 있습니까? 알려주십시오.
데이터 과학에 대해 자세히 알아보려면 작업 전문가를 위해 만들어졌으며 10개 이상의 사례 연구 및 프로젝트, 실용적인 실습 워크숍, 업계 전문가와의 멘토링, 1 - 업계 멘토와 일대일, 400시간 이상의 학습 및 최고의 기업과의 취업 지원.
Python은 그래픽 사용자 인터페이스를 만드는 데 적합합니까?
Python에는 Tkinter에서 다른 플랫폼 간 솔루션과 플랫폼별 바인딩에 이르기까지 다양한 그래픽 사용자 인터페이스 프레임워크가 있습니다. Python이 Tkinter와 결합되면 그래픽 사용자 인터페이스를 빠르고 쉽게 만들 수 있습니다. Python은 내장 위젯이 많고, 창을 빠르게 생성하고, 강력한 이벤트 처리 기술을 가지고 있으며, 기초적인 그리기 기능을 가지고 있기 때문에 GUI 생성에 이상적입니다.
Tkinter 또는 KIVY: 어느 것을 사용하는 것이 더 낫습니까?
Kivy는 독특하지만 매력적인 사용자 인터페이스 프로그램을 만들거나 디자인하기 위한 무료 오픈 소스 Python 프레임워크입니다. 앱 제작을 즐기는 파이썬 개발자라면 KIVY는 보다 동적인 애플리케이션을 만들기 위한 탁월한 선택입니다. Tkinter는 GUI 애플리케이션을 빠르고 쉽게 개발하기 위해 가장 널리 사용되는 Python 인터페이스입니다. Python을 처음 사용하고 컴퓨터 인터페이스를 만드는 방법을 배우고 싶다면 Tkinter로 시작하여 기본 사항을 배우십시오.