Tkinter 안녕하세요, 월드!

2024. 2. 13. 19:40GUI/tkinter

요약 : 이 튜토리얼에서는 Tkinter 프로그램으로 "Hello, World!"를 개발하는 방법을 단계별로 배우게 됩니다.

창 만들기

다음 프로그램은 화면에 창을 표시하는 방법을 보여줍니다.

In [ ]:
import tkinter as tk

root = tk.Tk()
root.mainloop()

프로그램을 실행하면 다음과 같은 창이 나타납니다.

 

어떻게 작동할까요?

먼저 tkinter 모듈을 tk로 프로그램으로 가져 옵니다.

import tkinter as tk

둘째, 애플리케이션 창을 생성할 tk.Tk 클래스의 인스턴스를 만듭니다 .

In [ ]:
root = tk.Tk()

관례적으로 Tkinter의 기본 창은 root이라고 합니다. 하지만 main와 같은 다른 이름을 사용할 수 있습니다
셋째, 기본 창 개체의 mainloop() 메서드를 호출합니다.

In [ ]:
root.mainloop()

이 mainloop()방법을 사용하면 기본 창이 화면에 계속 표시됩니다.

mainloop() 메서드를 호출하지 않으면 기본 창이 거의 즉시 표시되고 사라집니다. 너무 빨리 나타나서 모양을 인식할 수 없습니다.

또한 이 mainloop()메서드는 기본 창이 닫힐 때까지 계속 표시되고 실행되도록 합니다.

일반적으로 Tkinter 프로그램에서는 위젯을 생성한 후 마지막 명령문으로 mainloop() 메서드 호출을 배치합니다.

문제 해결

tkinter 모듈은 내장된 Python 모듈입니다. 그러나 때로는 그렇지 않습니다. 예를 들어 Ubuntu에서는 다음 오류가 발생할 수 있습니다.

ImportError: No module named Tkinter

이 경우 다음 명령줄을 사용하여 tkinter 모듈을 설치해야 합니다.

sudo apt-get install python3-tk

라벨 표시

이제 창에 컴포넌트를 배치해 보겠습니다. Tkinter에서는 이러한 구성요소를 위젯 이라고 합니다 .

다음 코드는 루트 창에 레이블 위젯을 추가합니다.

In [ ]:
import tkinter as tk


root = tk.Tk()

# place a label on the root window
message = tk.Label(root, text="Hello, World!")
message.pack()

# keep the window displaying
root.mainloop()

프로그램을 실행하면 다음과 같은 출력이 표시됩니다.

 

어떻게 작동할까요?  

컨테이너에 속하는 위젯을 생성하려면 다음 구문을 사용합니다.
In [ ]:
widget = WidgetName(master, **options)

이 구문에서는:

  • master는 위젯을 배치하려는 상위 창 또는 프레임 입니다.
  • options 은 위젯의 구성을 지정하는 하나 이상의 키드 인수 입니다.

프로그램에서 다음은 root 창에 배치된 Label 위젯을 생성합니다.

In [ ]:
message = tk.Label(root, text="Hello, World!")

다음 명령문은 기본 창에 Label 위치를 지정합니다.

In [ ]:
message.pack()

이 pack()메소도에 대해서는 나중에 자세히 배우게 됩니다. pack() 메소드를 호출하지 않으면 Tkinter는 여전히 위젯을 생성합니다. 단, 위젯은 표시되지 않습니다.

Windows에서 블러 UI 수정

Windows에서 텍스트와 UI가 흐릿한 경우 ctypes Python 라이브러리를 사용하여 수정할 수 있습니다.

먼저 ctypes 모듈을 가져옵니다.

In [ ]:
from ctypes import windll

둘째, SetProcessDpiAwareness()함수를 호출합니다.

In [ ]:
windll.shcore.SetProcessDpiAwareness(1)

Windows, macOS, Linux 등의 플랫폼에서 애플리케이션을 실행하려면 위 코드를 try...finally 블록에 배치하면 됩니다.

In [ ]:
try:
    from ctypes import windll

    windll.shcore.SetProcessDpiAwareness(1)
finally:
    root.mainloop()

Windows에서는 try 블록의 코드가 제대로 작동합니다. 그러나 macOS 또는 Linux에서는 실패합니다. 그러나 기본 창을 표시하는 finally 잠금 코드는 항상 실행됩니다.

요약

  • tkinter 모듈을 가져와서 Tkinter 데스크톱 응용 프로그램을 만듭니다.
  • Tk 클래스를 사용하여 기본 창을 만들고 기본 창 표시에 대한 mainloop() 메서드를 호출합니다.
  • Tkinter에서는 구성 요소를 위젯이라고 합니다.

'GUI > tkinter' 카테고리의 다른 글

Tkinter 명령 바인딩  (0) 2024.02.17
Tk 테마 위젯에 대한 옵션을 설정하는 3가지 방법  (0) 2024.02.16
Ttk 위젯  (0) 2024.02.15
Tkinter 창  (0) 2024.02.14
tkinter  (1) 2024.02.12