이런저런 IT 이야기
article thumbnail
Published 2023. 7. 22. 13:10
Hellow World PythonGUI
반응형

tkinter를 이용해 간단한 window 창 프로그램을 만들어 보았다.

import tkinter as tk

win = tk.Tk()

win.title('Hellow World')

win.mainloop()
  • import tkinter as tk: Tkinter 라이브러리를 tk라는 별칭으로 불러옵니다. 이렇게 하면 Tkinter 모듈의 함수와 클래스들은 tk.을 접두사로 사용하여 접근할 수 있습니다.
  • win = tk.Tk(): Tk() 함수를 사용하여 기본 윈도우(창) 객체를 생성합니다. win이라는 변수에 윈도우 객체를 할당합니다.
  • win.title('Hello World'): 생성한 윈도우 객체에 제목을 설정합니다. 윈도우 상단의 타이틀 바에 'Hello World'라는 제목이 나타납니다.
  • win.mainloop(): 생성한 윈도우를 메인 루프로 진입시키는 함수입니다. 이 함수를 호출하면 윈도우가 실행되며, 사용자의 입력을 대기하면서 윈도우가 열려 있는 상태로 유지됩니다. 메인 루프에서는 사용자의 입력을 처리하고, 창의 이벤트를 감지하며, 화면을 갱신합니다. 윈도우 창은 이 함수를 호출해야만 실제로 나타납니다.

  • Label 추가
import tkinter as tk
from tkinter import ttk

win = tk.Tk()

win.title('Hellow World')

ttk.Label(win, text="Hellow World").grid(column=0, row=0)

win.mainloop()
  • import tkinter as tk: Tkinter 라이브러리를 tk라는 별칭으로 불러옵니다. 이렇게 하면 Tkinter 모듈의 함수와 클래스들은 tk.을 접두사로 사용하여 접근할 수 있습니다.
  • from tkinter import ttk: ttk 모듈을 통해 추가적인 테마 위젯을 사용할 수 있도록 불러옵니다.
  • win = tk.Tk(): Tk() 함수를 사용하여 기본 윈도우(창) 객체를 생성합니다. win이라는 변수에 윈도우 객체를 할당합니다.
  • win.title('Hello World'): 생성한 윈도우 객체에 제목을 설정합니다. 윈도우 상단의 타이틀 바에 'Hello World'라는 제목이 나타납니다.
  • ttk.Label(win, text="Hello World").grid(column=0, row=0): ttk.Label을 사용하여 윈도우에 라벨을 추가합니다. 'Hello World'라는 텍스트를 포함하는 라벨이 생성되며, 이 라벨이 win이라는 윈도우 객체에 그리드 레이아웃으로 위치하도록 설정됩니다. column=0, row=0은 라벨이 그리드 레이아웃에서 0번째 열과 0번째 행에 위치하도록 지정한 것입니다.
  • win.mainloop(): 생성한 윈도우를 메인 루프로 진입시키는 함수입니다. 이 함수를 호출하면 윈도우가 실행되며, 사용자의 입력을 대기하면서 윈도우가 열려 있는 상태로 유지됩니다. 메인 루프에서는 사용자의 입력을 처리하고, 창의 이벤트를 감지하며, 화면을 갱신합니다. 윈도우 창은 이 함수를 호출해야만 실제로 나타납니다.
  • 버튼 추가
import tkinter as tk
from tkinter import ttk

win = tk.Tk()

win.title('Hellow World')

label = ttk.Label(win, text="Hellow World")
label.grid(column=0, row=0)

def clickme():
    label.configure(text="Clicked")
    label.configure(foreground="red")
    return

action = ttk.Button(win, text="Hi click me", command=clickme)
action.grid(column=1, row=0)

win.mainloop()
  • import tkinter as tk: Tkinter 라이브러리를 tk라는 별칭으로 불러옵니다.
  • from tkinter import ttk: ttk 모듈을 통해 추가적인 테마 위젯을 사용할 수 있도록 불러옵니다.
  • win = tk.Tk(): Tk() 함수를 사용하여 기본 윈도우(창) 객체를 생성합니다. win이라는 변수에 윈도우 객체를 할당합니다.
  • win.title('Hello World'): 생성한 윈도우 객체에 제목을 설정합니다. 윈도우 상단의 타이틀 바에 'Hello World'라는 제목이 나타납니다.
  • label = ttk.Label(win, text="Hello World"): ttk.Label을 사용하여 윈도우에 라벨 위젯을 추가합니다. 'Hello World'라는 텍스트를 포함하는 라벨이 생성되며, 이 라벨이 win이라는 윈도우 객체에 그리드 레이아웃으로 위치하도록 설정됩니다. label이라는 변수에 라벨 객체를 할당합니다.
  • label.grid(column=0, row=0): 라벨을 그리드 레이아웃으로 윈도우에 배치합니다. column=0, row=0은 라벨이 그리드 레이아웃에서 0번째 열과 0번째 행에 위치하도록 지정한 것입니다.
  • def clickme():: 사용자가 버튼을 클릭할 때 실행되는 함수인 clickme를 정의합니다.
  • label.configure(text="Clicked"): 버튼을 클릭하면 라벨의 텍스트를 "Clicked"로 변경합니다.
  • label.configure(foreground="red"): 버튼을 클릭하면 라벨의 전경색을 빨간색으로 변경합니다.
  • action = ttk.Button(win, text="Hi click me", command=clickme): ttk.Button을 사용하여 윈도우에 버튼 위젯을 추가합니다. 버튼의 텍스트는 "Hi click me"로 설정되고, 사용자가 버튼을 클릭하면 clickme 함수가 실행됩니다. action이라는 변수에 버튼 객체를 할당합니다.
  • action.grid(column=1, row=0): 버튼을 그리드 레이아웃으로 윈도우에 배치합니다. column=1, row=0은 버튼이 그리드 레이아웃에서 1번째 열과 0번째 행에 위치하도록 지정한 것입니다.
  • win.mainloop(): 생성한 윈도우를 메인 루프로 진입시키는 함수입니다. 이 함수를 호출하면 윈도우가 실행되며, 사용자의 입력을 대기하면서 윈도우가 열려 있는 상태로 유지됩니다. 메인 루프에서는 사용자의 입력을 처리하고, 창의 이벤트를 감지하며, 화면을 갱신합니다. 윈도우 창은 이 함수를 호출해야만 실제로 나타납니다.

클릭전 window
클릭후 window

  • text 입력 박스
import tkinter as tk
from tkinter import ttk

win = tk.Tk()

win.title('Hellow World')

label = ttk.Label(win, text="Hellow World")
label.grid(column=0, row=0)

def clickme():
    label.configure(text="Clicked")
    label.configure(foreground="red")
    return

action = ttk.Button(win, text="Hi click me", command=clickme)
action.grid(column=1, row=0)

name = tk.StringVar()
inputs = ttk.Entry(win, width=20, textvariable=name)
inputs.grid(column=1, row=1)
inputs.focus()

win.mainloop()
  • name = tk.StringVar(): tk.StringVar 클래스를 사용하여 입력 받을 문자열 변수 name을 선언합니다.
  • inputs = ttk.Entry(win, width=20, textvariable=name): ttk.Entry 위젯을 사용하여 윈도우에 텍스트 입력 상자를 추가합니다. 입력 상자의 너비는 width=20으로 설정하고, 입력된 텍스트를 name 변수에 저장하도록 textvariable=name으로 설정합니다.
  • inputs.grid(column=1, row=1): 텍스트 입력 상자를 그리드 레이아웃으로 윈도우에 배치합니다. column=1, row=1은 상자가 그리드 레이아웃에서 1번째 열과 1번째 행에 위치하도록 지정한 것입니다.
  • inputs.focus(): 프로그램이 실행되면 텍스트 입력 상자에 자동으로 포커스를 설정합니다. 사용자가 바로 입력을 시작할 수 있도록 해줍니다.
  • win.mainloop(): 생성한 윈도우를 메인 루프로 진입시키는 함수입니다. 이 함수를 호출하면 윈도우가 실행되며, 사용자의 입력을 대기하면서 윈도우가 열려 있는 상태로 유지됩니다. 메인 루프에서는 사용자의 입력을 처리하고, 창의 이벤트를 감지하며, 화면을 갱신합니다. 윈도우 창은 이 함수를 호출해야만 실제로 나타납니다.

입력 박스

  • Combobox
import tkinter as tk
from tkinter import ttk

win = tk.Tk()

win.title('Hellow World')

label = ttk.Label(win, text="Hellow World")
label.grid(column=0, row=0)

def clickme():
    label.configure(text="Clicked")
    label.configure(foreground="red")
    return

action = ttk.Button(win, text="Hi click me", command=clickme)
action.grid(column=1, row=0)

name = tk.StringVar()
inputs = ttk.Entry(win, width=20, textvariable=name)
inputs.grid(column=0, row=1)
inputs.focus()

number = tk.StringVar()
cbox = ttk.Combobox(win, width=20, textvariable=number)
cbox['values'] = (1,2,3,4,5,6,7,8,9)
cbox.grid(column=1, row=1)
cbox.current(0)

win.mainloop()
  • chk1 = tk.IntVar(), chk2 = tk.IntVar(), chk3 = tk.IntVar(): tk.IntVar 클래스를 사용하여 각각 체크박스의 상태를 저장하는 변수 chk1, chk2, chk3을 선언합니다.
  • checkbox1 = ttk.Checkbutton(win, text='option1', variable=chk1, state='disabled'): 첫 번째 체크박스를 생성하고, variable 옵션에 chk1 변수를 설정하여 체크박스의 상태를 관리합니다. state='disabled'를 설정하여 체크박스를 비활성화 상태로 만듭니다.
  • checkbox2 = ttk.Checkbutton(win, text='option2', variable=chk2): 두 번째 체크박스를 생성하고, variable 옵션에 chk2 변수를 설정하여 체크박스의 상태를 관리합니다.
  • checkbox3 = ttk.Checkbutton(win, text='option3', variable=chk3): 세 번째 체크박스를 생성하고, variable 옵션에 chk3 변수를 설정하여 체크박스의 상태를 관리합니다. chk3.set(True)를 사용하여 체크박스를 초기에 선택된 상태로 만듭니다.
  • checkbox1.grid(column=0, row=2, sticky='W'), checkbox2.grid(column=1, row=2, sticky='W'), checkbox3.grid(column=2, row=2, sticky='W'): 각 체크박스를 그리드 레이아웃으로 윈도우에 배치합니다. column과 row 옵션은 체크박스의 위치를 지정하며, sticky='W'는 체크박스가 왼쪽으로 정렬되도록 설정한 것입니다.

  • CheckBox
import tkinter as tk
from tkinter import ttk

win = tk.Tk()

win.title('Hellow World')

label = ttk.Label(win, text="Hellow World")
label.grid(column=0, row=0)

def clickme():
    label.configure(text="Clicked")
    label.configure(foreground="red")
    return

action = ttk.Button(win, text="Hi click me", command=clickme)
action.grid(column=1, row=0)

name = tk.StringVar()
inputs = ttk.Entry(win, width=20, textvariable=name)
inputs.grid(column=0, row=1)
inputs.focus()

number = tk.StringVar()
cbox = ttk.Combobox(win, width=20, textvariable=number)
cbox['values'] = (1,2,3,4,5,6,7,8,9)
cbox.grid(column=1, row=1)
cbox.current(0)

chk1 = tk.IntVar()
checkbox1 = ttk.Checkbutton(win, text='option1', variable=chk1, state='disabled')
checkbox1.grid(column=0, row=2, sticky='W')

chk2 = tk.IntVar()
checkbox2 = ttk.Checkbutton(win, text='option2', variable=chk2)
checkbox2.grid(column=1, row=2, sticky='W')

chk3 = tk.IntVar()
checkbox3 = ttk.Checkbutton(win, text='option3', variable=chk3)
chk3.set(True)
checkbox3.grid(column=2, row=2, sticky='W')

win.mainloop()
  • tk.Tk(): Tk 클래스를 사용하여 윈도우 객체 win을 생성합니다. 이 윈도우는 기본적인 창을 나타내는 것으로, 이후 위젯들을 배치하고 사용자와 상호작용하는 인터페이스를 구성하는 기본적인 뼈대입니다.
  • win.title('Hello World'): 윈도우 객체 win의 타이틀을 "Hello World"로 설정합니다.
  • ttk.Label(win, text="Hello World"): ttk 모듈의 Label 클래스를 사용하여 라벨 위젯을 생성합니다. 이 라벨은 윈도우에 텍스트 "Hello World"를 표시하는 역할을 합니다.
  • label.grid(column=0, row=0): 생성한 라벨 위젯 label을 grid 메서드를 사용하여 윈도우의 (0, 0) 위치에 배치합니다.
  • clickme() 함수: 이 함수는 "Hi click me" 버튼을 클릭했을 때 호출됩니다. 라벨의 텍스트를 "Clicked"로 변경하고, 텍스트 색상을 빨간색으로 변경하는 역할을 합니다.
  • ttk.Button(win, text="Hi click me", command=clickme): ttk 모듈의 Button 클래스를 사용하여 버튼 위젯을 생성합니다. 이 버튼은 텍스트 "Hi click me"를 가지고 있으며, 클릭 시 clickme() 함수가 호출됩니다.
  • action.grid(column=1, row=0): 생성한 버튼 위젯 action을 grid 메서드를 사용하여 윈도우의 (1, 0) 위치에 배치합니다.
  • tk.StringVar(): tk 모듈의 StringVar 클래스를 사용하여 변수 name을 생성합니다. 이 변수는 텍스트 엔트리 위젯에 사용되어 사용자의 입력을 저장합니다.
  • ttk.Entry(win, width=20, textvariable=name): ttk 모듈의 Entry 클래스를 사용하여 텍스트 엔트리 위젯 inputs를 생성합니다. 이 엔트리 위젯은 윈도우에 텍스트 입력을 받는 상자를 표시하며, 사용자가 입력한 내용은 name 변수에 저장됩니다.
  • inputs.grid(column=0, row=1): 생성한 텍스트 엔트리 위젯 inputs를 grid 메서드를 사용하여 윈도우의 (0, 1) 위치에 배치합니다.
  • inputs.focus(): focus 메서드를 사용하여 텍스트 엔트리 위젯 inputs에 포커스를 설정합니다. 따라서 윈도우를 실행하면 사용자가 바로 입력을 시작할 수 있습니다.
  • tk.StringVar(): tk 모듈의 StringVar 클래스를 사용하여 변수 number를 생성합니다. 이 변수는 콤보박스 위젯에 사용되어 사용자가 선택한 값을 저장합니다.
  • ttk.Combobox(win, width=20, textvariable=number): ttk 모듈의 Combobox 클래스를 사용하여 콤보박스 위젯 cbox를 생성합니다. 이 콤보박스는 윈도우에 드롭다운 목록을 가지고 있으며, 사용자가 선택한 값은 number 변수에 저장됩니다.
  • cbox['values'] = (1,2,3,4,5,6,7,8,9): 콤보박스의 선택 가능한 값들을 튜플 (1,2,3,4,5,6,7,8,9)로 설정합니다.
  • cbox.grid(column=1, row=1): 생성한 콤보박스 위젯 cbox를 grid 메서드를 사용하여 윈도우의 (1, 1) 위치에 배치합니다.
  • cbox.current(0): 콤보박스에서 초기 선택 값을 0으로 설정합니다. 따라서 콤보박스를 실행하면 초기에 1이 선택된 상태로 시작합니다.
  • tk.IntVar(): tk 모듈의 IntVar 클래스를 사용하여 정수형 변수 chk1, chk2, chk3를 생성합니다. 이 변수들은 체크박스 위젯들의 상태를 저장하는 데 사용됩니다.
  • ttk.Checkbutton(win, text='option1', variable=chk1, state='disabled'): ttk 모듈의 Checkbutton 클래스를 사용하여 체크박스 위젯 checkbox1를 생성합니다. 이 체크박스는 텍스트 "option1"을 가지고 있으며, chk1 변수와 연결되어 있습니다. state='disabled'로 설정하여 체크박스를 비활성화 상태로 만들었습니다.
  • checkbox1.grid(column=0, row=2, sticky='W'): 생성한 체크박스 위젯 checkbox1을 grid 메서드를 사용하여 윈도우의 (0, 2) 위치에 배치합니다.
  • ttk.Checkbutton(win, text='option2', variable=chk2): ttk 모듈의 Checkbutton 클래스를 사용하여 체크박스 위젯 checkbox2를 생성합니다. 이 체크박스는 텍스트 "option2"를 가지고 있으며, chk2 변수와 연결되어 있습니다.
  • checkbox2.grid(column=1, row=2, sticky='W'): 생성한 체크박스 위젯 checkbox2을 grid 메서드를 사용하여 윈도우의 (1, 2) 위치에 배치합니다.
  • ttk.Checkbutton(win, text='option3', variable=chk3): ttk 모듈의 Checkbutton 클래스를 사용하여 체크박스 위젯 checkbox3를 생성합니다. 이 체크박스는 텍스트 "option3"을 가지고 있으며, chk3 변수와 연결되어 있습니다.
  • chk3.set(True): chk3 변수의 값을 True로 설정하여 초기에 체크박스가 선택된 상태로 시작합니다.
  • checkbox3.grid(column=2, row=2, sticky='W'): 생성한 체크박스 위젯 checkbox3을 grid 메서드를 사용하여 윈도우의 (2, 2) 위치에 배치합니다.
  • win.mainloop(): 생성한 윈도우 win 객체의 mainloop 메서드를 호출하여 윈도우를 실행합니다. 이 메서드는 윈도우가 닫힐 때까지 사용자의 입력을 대기하는 역할을 합니다.

  • Scrolledtext
import tkinter as tk
from tkinter import ttk
from tkinter import scrolledtext
win = tk.Tk()

win.title('Hellow World')

label = ttk.Label(win, text="Hellow World")
label.grid(column=0, row=0)

def clickme():
    label.configure(text="Clicked")
    label.configure(foreground="red")
    return

action = ttk.Button(win, text="Hi click me", command=clickme)
action.grid(column=1, row=0)

name = tk.StringVar()
inputs = ttk.Entry(win, width=20, textvariable=name)
inputs.grid(column=0, row=1)
inputs.focus()

number = tk.StringVar()
cbox = ttk.Combobox(win, width=20, textvariable=number)
cbox['values'] = (1,2,3,4,5,6,7,8,9)
cbox.grid(column=1, row=1)
cbox.current(0)

chk1 = tk.IntVar()
checkbox1 = ttk.Checkbutton(win, text='option1', variable=chk1, state='disabled')
checkbox1.grid(column=0, row=2, sticky='W')

chk2 = tk.IntVar()
checkbox2 = ttk.Checkbutton(win, text='option2', variable=chk2)
checkbox2.grid(column=1, row=2, sticky='W')

chk3 = tk.IntVar()
checkbox3 = ttk.Checkbutton(win, text='option3', variable=chk3)
chk3.set(True)
checkbox3.grid(column=2, row=2, sticky='W')

stext = scrolledtext.ScrolledText(win, width=50, height=3, wrap=tk.WORD)
stext.grid(column=0, row=3, columnspan=3)

win.mainloop()
  • scrolledtext.ScrolledText(win, width=50, height=3, wrap=tk.WORD): scrolledtext 모듈의 ScrolledText 클래스를 사용하여 스크롤 가능한 텍스트 상자 stext를 생성합니다. 이 상자는 폭이 50이고 높이가 3이며, wrap=tk.WORD로 설정하여 단어 단위로 텍스트가 줄 바꿈되도록 설정합니다.
  • stext.grid(column=0, row=3, columnspan=3): 생성한 스크롤 가능한 텍스트 상자 stext를 grid 메서드를 사용하여 윈도우의 (0, 3) 위치에 배치합니다. columnspan=3로 설정하여 stext 위젯이 3개의 열에 걸쳐 있음을 나타냅니다.

반응형

'PythonGUI' 카테고리의 다른 글

Python GUI?  (0) 2023.07.21
profile

이런저런 IT 이야기

@이런저런 IT 이야기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...

검색 태그