개발자/라즈베리파이4

라즈베리파이 Python 프로그래밍 12: Tkinter 및 TTK ​​위젯

지구빵집 2021. 11. 16. 10:40
반응형

 

 

라즈베리파이 Python 프로그래밍 12: Tkinter 및 TTK ​​위젯 

 

에서 이전의 튜토리얼 , 우리는 Tkinter에서 창 위젯에 대해 배우고 (아이가 GUI 응용 프로그램에서 다른 창으로하지 않은) 빈 GUI 기본 창을 설계했습니다. 자식 창은 다른 위젯의 컨테이너 역할을 합니다.

 

빈 창의 포인트가 없으므로 사용자와의 상호 작용을 용이하게 하기 위해 창 위젯에 포함된 다른 위젯이 있어야 합니다. 창 위젯에 포함된 위젯은 해당 창의 자식입니다.

 

Tk 위젯

 

Tk는 크로스 플랫폼 사용자 인터페이스 툴킷입니다. X11, Microsoft Windows 및 Mac OS X 시스템용 그래픽 사용자 인터페이스를 디자인하는 데 사용할 수 있습니다. 현재 Tk를 GUI 툴킷으로 사용하는 프로그래밍 언어에는 Python, Ruby, Pearl 및 Tcl이 있습니다.

 

GUI는 컨테이너 위젯에 배치된 여러 위젯으로 구성됩니다. 위젯은 사용자 인터페이스에서 특정 종류의 상호 작용 및 기능을 제공하는 그래픽 요소로 볼 수 있습니다. 최상위 컨테이너 위젯은 항상 창입니다.

 

Tk는 메뉴, 창, 표준 대화 상자 및 이미지뿐만 아니라 채우기 양식 유형 인터페이스를 위한 여러 위젯을 제공합니다. 또한 사용자 인터페이스에 대한 색상, 글꼴, 스타일 및 테마를 지원합니다.

 

원래 패키지에 포함된 위젯을 클래식 위젯이라고 하며 Tkinter 모듈로 패키지됩니다. Tk 8.5는 최근 ttk 패키지로 제공되는 새로운 테마 위젯 세트를 추가했습니다. 그러나 이러한 새 위젯을 Tkinter와 함께 사용하려면 ttk 패키지를 별도로 가져와야 합니다.

 

위젯은 각각 고유한 모양과 기능을 가진 클래스 개체로 GUI 앱에 포함됩니다. 이것은 모든 위젯이 Tkinter/ttk의 하위 클래스이며 GUI에 위젯을 포함하기 위해 해당 클래스의 객체를 인스턴스화해야 함을 의미합니다.

 

Tkinter에는 WYSIWYG 편집기가 없습니다. 따라서 각 위젯을 생성하려면 해당 코드를 작성하고 해당 코드 내에서 위젯을 관리해야 합니다. 모든 위젯 관리에는 일반적으로 다음 세 가지 작업이 포함됩니다.

 

1. 위젯의 모양 설정

2. 위젯 의 레이아웃 설정

3. 위젯에 기능 또는 동작 추가

 

Tkinter에서 사용 가능한 구성 옵션을 설정하여 위젯의 모양을 설정할 수 있습니다. 코드에서 이러한 구성은 해당 위젯 클래스 개체에 사용할 수 있는 속성을 설정하여 결정됩니다.

 

위젯의 레이아웃을 설정한다는 것은 위젯이 컨테이너 위젯(즉, 창 또는 프레임)에서 표시되어야 하는 위치와 방법을 의미합니다. Tkinter는 절대 위치 지정, 팩 레이아웃 및 그리드 레이아웃의 세 가지 유형의 레이아웃(기하학) 관리를 제공합니다.

 

위젯은 place(), pack() 또는 grid() 메서드를 호출하여 이러한 유형 중 하나로 구성할 수 있습니다. 위젯의 구성 옵션은 위젯에서 레이아웃 관리 메서드를 호출하기 전이나 후에 언제든지 설정할 수 있습니다. 그러나 위젯 객체에 대한 레이아웃 관리 방법(place, pack 또는 grid) 중 하나가 호출될 때까지는 컨테이너 위젯에 나타나지 않습니다.

 

GUI 애플리케이션은 항상 이벤트 기반이며 각 위젯에는 사용 가능한 고유한 이벤트 세트가 있습니다. 이러한 이벤트는 사용자 상호 작용에 의해 트리거됩니다. 예를 들어 사용자가 이벤트를 트리거하면 이에 대한 응답으로 코드 블록이 실행됩니다.

 

(위젯) 이벤트에 대한 코드 동작을 작성하는 프로세스를 이벤트 바인딩이라고 합니다. (위젯) 이벤트에 대한 응답으로 실행되는 코드 블록을 이벤트 핸들러라고 합니다. 이벤트 핸들러는 클래스 객체의 함수 또는 호출 가능한 속성/메서드가 될 수 있도록 호출 가능해야 합니다.

 

Tkinter에서 위젯에 기능이나 코드 동작을 추가하는 것은 해당 위젯에 대한 이벤트 바인딩과 동일합니다. 위젯에 대한 이벤트 바인딩은 호출 가능(함수 또는 클래스 메서드)을 command 속성(해당 위젯에서 사용 가능한 경우)에 할당하거나 bind() 메서드를 사용하여 수행할 수 있습니다.

 

ttk가 포함된 Tkinter 패키지(창, 표준 대화 상자, 메뉴 및 이미지 제외)는 다음과 같은 기본 위젯을 제공합니다.

 

  • Frame
  • Label Button
  • Checkbutton
  • Radiobutton
  • Entry
  • Combobox
  • Listbox
  • Scrollbar
  • Sizegrip
  • Text
  • Progressbar
  • Scale
  • Spinbox
  • Separator
  • Labelframe
  • Panedwindow
  • Notebook
  • Canvas
  • Treeview

Frame, Label, Button, Checkbutton, Radiobutton, Entry 및 Combobox는 인터페이스의 채우기 양식 유형에 대한 위젯입니다. Listbox, Scrollbar, Sizegrip, Text, Progressbar, Scale 및 Spinbox는 특정 목적을 위한 추가 위젯입니다. Frame, Labelframe, Panedwindow 및 Notebook은 창 위젯 내에서 컨테이너 위젯 역할을 합니다.

 

Treeview 위젯은 계층적 순서로 정렬된 항목 목록을 표시합니다. 캔버스 위젯은 그리기, 다이어그램 작성 또는 기타 복잡한 위젯 생성에 사용할 수 있는 강력한 위젯입니다. Separator는 두 개의 서로 다른 위젯 그룹을 분리하는 데 사용할 수 있는 프레젠테이션 위젯입니다.

 

위에서 언급한 위젯 중 Combobox, Notebook, Separator, Progressbar, Sizegrip 및 Treeview는 ttk 패키지에만 제공되는 새로운 위젯입니다.

 

우리는 Raspberry Pi 레시피를 위해 GUI에서 Frame, Label, Combobox, Entry, Text, Checkbutton, Radiobutton 및 Button 위젯을 자주 사용합니다. 이러한 위젯은 아래에 설명되어 있습니다.

 

프레임 – 창 위젯 내에서 컨테이너 위젯 역할을 합니다. 다른 위젯을 그룹화하고 정렬하는 데 탁월한 직사각형 컨테이너입니다. 프레임은 그 안에 포함된 다른 위젯(클래스) 객체의 부모 클래스로 사용됩니다. 프레임의 대표적인 예는 윈도우 화면입니다.

 

https://sergeswin.com/1269/

 

프레임 개체를 인스턴스화하여 프레임을 만들 수 있습니다. 프레임 객체는 tkinter 또는 ttk 클래스의 Frame() 메서드를 사용하여 인스턴스화할 수 있습니다. 프레임 개체의 정의에는 다음 구문이 있습니다.

 

var = Frame(parent, [configuration options, ….)

 

다음은 프레임을 만드는 코드입니다.

 

LED_def = Frame(root) # root is the name of the parent window:

 

프레임 자체는 창 위젯 내에서만 만들 수 있는 컨테이너 위젯입니다. 프레임 개체의 부모는 기본 창 또는 자식 창일 수 있습니다. "상위"는 프레임 정의에 전달되어야 하는 필수 인수입니다. 위젯의 모양과 느낌을 변경하는 구성 옵션은 선택적 인수입니다.

 

프레임 개체에는 다음과 같은 구성 옵션이 있습니다.

 

Configuration Option
Description
bg Description Background color behind the labels and indicators
bd  Size of the border around the indicator
relief Set a 3D style to the outside of the frame 
cursor  If set to a cursor name, cursor will change to that pattern when hovering the frame 
width  Set the width of the frame 
height Set the height of the frame 
padding
Set the padding of the frame; if assigned single value, same value applies to all sides; if assigned to a tuple of two values, first value assigns to left and right, and second value to top and bottom; if assigned a tuple of four values, they are assigned to left, top, right and bottom respectively; 
padx  Set left and right padding 
pady  Set top and bottom padding 
style Apply a theme style to the frame

 

Tkinter의 색상(예: bg)은 색상에 대한 16진수 값(예: "#fff," #fdfdfd 등) 또는 색상 이름(예: "red," "blue," " 녹색" 등).

 

정수로 설정된 모든 치수(테두리 너비, 패딩 등)는 픽셀 값을 가정합니다. 다음 지표를 값에 접미사로 붙여 차원에 단위를 지정할 수 있습니다.

 

Character Unit
c Centimeters
i Inches
m Millimeters
p Printer's Points

 

기본적으로 프레임에는 테두리가 없습니다. "bd" 속성에 값이 할당되고 "relief" 속성에 값이 할당되면(flat 제외) 프레임에는 해당 너비와 스타일의 테두리가 있습니다. 릴리프 속성은 테두리 스타일을 결정합니다.

 

Tkinter에서 지원되는 릴리프 스타일은 평면, 융기, 함몰, 홈 및 융기입니다. 프레임에 "평면"이 할당된 릴리프 스타일이 있는 경우 테두리가 표시되지 않습니다.

 

Tkinter에서 지원되는 마우스 커서: 화살표, 원, 시계, 십자가, 도트박스, 교환, 백합, 심장, 사람, 마우스, 해적, 플러스, 셔틀, 크기 조정, 거미, 스프레이캔, 별, 대상, tcross, trek 및 watch. 기본 커서는 "화살표"입니다.

 

프레임에 대한 구성 옵션은 프레임 정의 내에서 키-값 쌍 인수로 설정하거나 명시적으로 정의할 수 있습니다. 다음은 프레임에 대한 구성 옵션을 설정하는 두 가지 구문을 보여줍니다.

 

LED_def = Frame(root, padx = 25, pady = 10)
LED_def.grid()
or
LED_def = Frame(root)
LED_def.grid()
LED_def[“padx”]= 25
LED_def[“pady”]= 10

 

프레임은 다른 기본 위젯의 컨테이너 위젯 역할만 하며 이벤트 바인딩은 포함하지 않습니다.

 

Label: 텍스트 및 이미지의 컨테이너 역할을 합니다. 레이블 안의 텍스트는 업데이트하거나 변경할 수 있습니다. 일반적으로 레이블은 인터페이스에 있는 다른 위젯의 목적을 나타내는 데 사용됩니다. 레이블은 다음과 같습니다.

 

https://www.webdesigntutorialz.com/2020/09/python-tkinter-label-widget.html

 

레이블 개체를 인스턴스화하여 레이블을 만들 수 있습니다. 레이블 객체는 Tkinter 또는 ttk 클래스의 Label() 메서드를 사용하여 인스턴스화할 수 있습니다. 레이블 개체의 정의에는 다음 구문이 있습니다.

 

var = Label(parent, [configuration options, ….)

 

다음은 레이블을 만드는 유효한 예입니다.

 

label_LED_gpio = Label(LED_def, text = “Select GPIO”) # LED_def is the name of the parent window or frame

 

레이블 개체의 부모는 기본 창, 자식 창 또는 프레임일 수 있습니다. 레이블 개체에는 다음과 같은 구성 옵션이 있습니다.

 

라벨 문자열 설정

 

이름 의미 기본값 속성
text 라벨에 표시할 문자열 - -
textvariable 라벨에 표시할 문자열을 가져올 변수 - -
anchor 라벨안의 문자열 또는 이미지의 위치 center n, ne, e, se, s, sw, w, nw, center
justify 라벨의 문자열이 여러 줄 일 경우 정렬 방법 center center, left, right
wraplength 자동 줄내림 설정 너비 0 상수

 

라벨 형태 설정

 

이름 의미 기본값 속성
width 라벨의 너비 0 상수
height 라벨의 높이 0 상수
relief 라벨의 테두리 모양 flat flat, groove, raised, ridge, solid, sunken
borderwidth=bd 라벨의 테두리 두께 2 상수
background=bg           라벨의 배경 색상         SystemButtonFace                   color                  
foreground=fg         라벨의 문자열 색상         SystemButtonFace                   color                  
padx 라벨의 테두리와 내용의 가로 여백 1 상수
pady 라벨의 테두리와 내용의 세로 여백 1 상수

 

라벨 형식 설정

 

이름 의미 기본값 속성
bitmap 라벨에 포함할 기본 이미지 - info, warning, error, question, questhead, hourglass, gray12, gray25, gray50, gray75
image 라벨에 포함할 임의 이미지 - -
compound 라벨에 문자열과 이미지를 동시에 표시할 때 이미지의 위치 none bottom, center, left, none, right, top
font 라벨의 문자열 글꼴 설정 TkDefaultFont font
cursor 라벨의 마우스 커서 모양 - 커서 속성

 

라벨 상태 설정

 

이름  이미 기본값 속성
state 상태 설정 normal normal, active, disabled
activebackground active 상태일 때 라벨의 배경 색상 SystemButtonFace color
activeforeground active 상태일 때 라벨의 문자열 색상 SystemButtonText color
disabledforeground disabeld 상태일 때 라벨의 문자열 색상 SystemDisabledText color

 

라벨 하이라이트 설정 

 

이름 의미 기본값 속성
highlightcolor 라벨이 선택되었을 때 색상 SystemWindowFrame color
highlightbackground 라벨이 선택되지 않았을 때 색상 SystemButtonFace color
highlightthickness 라벨이 선택되었을 때 두께 (두께 설정) 0 상수

 

레이블에 있는 텍스트의 글꼴은 첫 번째 요소가 글꼴 모음이고 두 번째 요소가 프린터 포인트의 글꼴 크기여야 하는 튜플로 지정할 수 있습니다. 그런 다음 가중치, 기울기, 밑줄 또는 겹침과 같은 다른 가능한 선택적 스타일 수정자가 있습니다.

 

Tkinter의 글꼴 패키지를 가져온 후에 글꼴 개체를 만들 수도 있습니다. 다음 구문을 사용하여 글꼴 개체를 인스턴스화하여 글꼴을 만들 수 있습니다.

 

Font1 = font.Font(optons, ….)

 

옵션은 다음과 같습니다.

 

  • Font family – either standard, platform-specific, or a named font
  • Font size – in the printer’s points
  • Weight – normal or bold
  • Slant – roman or italic
  • Underline – set to “1” for underlined text or “0” for normal
  • Overstrike – set to “1” for overstruck text and “0” for normal 

 

글꼴 정의에서 글꼴 패밀리와 크기는 필수 옵션이고 나머지는 선택 사항입니다. 글꼴 개체를 만든 후 모든 위젯의 글꼴 속성에 할당할 수 있습니다. 다음은 글꼴 개체를 만들고 사용하는 유효한 예입니다.

 

from tkinter import font
labels_font = font.Font(family=’Helvetica’, size=12, weight=’bold’)
label_LED_gpio = Label(LED_def, text = “Select GPIO”, font=labels_font)

 

레이블에 비트맵이나 정적 이미지를 표시하는 것도 가능합니다. Tkinter에서 사용할 수 있는 비트맵에는 error, hourglass, info, guesthead, question, warning, gray75, gray50, gray25 및 gray12가 있습니다.

 

비트맵이 레이블에 할당된 경우 텍스트가 레이블에 표시되지 않습니다. 대신 텍스트 대신 비트맵이 표시됩니다. 레이블에 있는 텍스트의 글꼴은 튜플로 지정할 수 있습니다. 여기서 첫 번째 요소는 글꼴 모음이어야 하고 두 번째 요소는 프린터 포인트의 글꼴 크기여야 합니다. 가중치, 기울기, 밑줄 또는 겹침과 같은 다른 선택적 스타일 수정자도 있습니다.

 

정적 이미지를 포함하려면 Tkinter의 Python 이미지 라이브러리(PIL) 또는 최신 버전인 Pillow를 가져와야 합니다. 그러나 PIL 패키지는 Python과 함께 제공되지 않습니다. 따라서 셸(Raspberry Pi의 Bash 셸)에서 다음 명령을 실행하여 설치해야 합니다.

 

pip install pillow

 

이 명령문은 Pillow라고 하는 PIL 또는 최신 버전을 가져올 수 있습니다.

 

from PIL import ImageTk, Image

 

다음으로 ImageTk 클래스의 PhotoImage() 메서드를 사용하여 이미지 개체를 만들어야 합니다. 이미지 개체는 이미지 속성에 할당되어야 합니다. 다음은 레이블에 이미지를 포함하는 코드 예입니다.

 

from PIL import ImageTk, Image
myimg = ImageTk.PhotoImage(Image.open(‘myimage.png’))
label = Label(root, image=myimg)
label.grid()

 

이미지 객체에서 이미지를 열 때 다음 구문을 사용할 수도 있습니다.

 

myimg = ImageTk.PhotoImage(file = ‘myimage.png’)

 

Tk는 GIF 및 PPM/PNM 이미지를 지원합니다. Tk 8.6은 PNG 이미지도 지원합니다. PIL을 설치한 후 BMP, JPEG, PNG, TIFF와 같은 다른 많은 이미지 형식에 대한 지원도 포함됩니다.

 

PIL/Pillow를 사용할 때 이미지는 레이블에 채워지거나 부모 창의 자식 또는 부모 창 내부 프레임의 자식인 캔버스로 채워질 수 있습니다. 그러나 PIL/Pillow는 이 계층을 넘어서는 이미지를 채우지 않습니다. 예를 들어, 부모 창의 자식인 다른 프레임 내부의 프레임에 이미지를 채우는 데 실패합니다.

 

레이블의 텍스트는 textvariable 속성을 사용하여 변수에 바인딩할 수 있습니다. 이런 식으로 코드에서 텍스트를 업데이트하거나 변경할 수 있습니다. 다음은 레이블 텍스트를 StringVar 유형 변수에 바인딩하는 코드입니다.

 

from tkinter import *
from tkinter import ttk
def func():
global var
var.set(“Text is changed!”)
root = Tk()
root.title(“Dynamic Text of Label”)
root.minsize(200, 200)
var = StringVar()
label = Label(root, textvariable = var, padx = 50, pady = 50)
var.set(“Click Button to change text of this label”)
label.pack()
button = Button(root, text = “Change Text”, command = func)
button.pack()
root.mainloop()

 

레이블은 다른 위젯의 기능이나 목적을 나타내는 데 사용되는 텍스트 및 이미지의 컨테이너 역할을 합니다. 그러나 여전히 마우스 이벤트를 바인딩할 수 있습니다.

 

Combobox – ttk 패키지에서 제공됩니다. 사용자가 선택할 수 있는 텍스트 값 목록이 표시됩니다.

 

콤보 상자는 다음과 같습니다.

 

https://codeloop.org/how-to-create-combobox-in-tkinter-python/#more-1254

 

콤보 상자 개체를 인스턴스화하여 콤보 상자를 만들 수 있습니다. 콤보 상자 개체는 ttk 클래스의 Combobox() 메서드를 사용하여 인스턴스화할 수 있습니다. 콤보 상자 개체의 정의에는 다음 코드를 참고하세요.

 

var = ttk.Combobox(parent, [configuration options, ….) #ttk is reference to ttk class

 

다음은 콤보 상자를 만드는 코드를 보여줍니다.

 

combo_LED_config = ttk.Combobox(LED_def, values=[“Source Mode”, “Sink Mode”])

 

콤보 상자 개체의 부모는 기본 창, 자식 창 또는 프레임이 될 수 있습니다. 콤보 상자 개체에는 다음과 같은 구성 옵션이 있습니다.

 

콤보박스 메소드

set(“문자열”) 표시값 변경 콤보박스의 현재 텍스트 변경
get() 표시값 반환 콤보박스의 현재 텍스트 반환
current(index) 목록 표시 해당 index의 목록 표시

 

콤보박스 텍스트 설정

variable 콤보박스에 표시할 문자열을 가져올 변수 - -
justify 콤보박스의 문자열이 여러 줄 일 경우 정렬 방법 left center, left, right

 

콤보박스 형태 설정

dth 콤보박스의 너비 20 상수
height 콤보박스의 드롭 다운 목록이 표시할 개수 20 상수

 

콤보박스 형식 설정

cursor 콤보박스의 마우스 커서 모양 - 커서 속성
class_ 클래스 설정 - -
xscrollcommand 콤보박스의 가로스크롤 위젯 적용 - Scrollbar위젯.set
values  콤보박스의 목록 값 - list, tuple 등
exportselection 수치 조정 기압창의 선택 항목 여부 설정 True Boolean

 

콤보박스 동작 설정 

takefocus Tab 키를 이용하여 위젯 이동 허용 여부 False Boolean
postcommand 콤보박스에서 드롭다운 목록을 클릭할 때 실행하는 메소드(함수) - 메소드, 함수
validate 콤보박스의 유효성 검사 실행 조건 none none, focus, focusin, focusout, key, all
validatecommand 유효성 검사 평가 함수 - 함수
invalidcommand validateCommand가 False를 반환 할 때 실행할 함수 - 함수

 

콤보 상자의 값은 Python 목록 또는 튜플로 지정할 수 있습니다. textvariable 속성을 사용하여 콤보 상자에 값을 동적으로 채울 수도 있습니다. 값은 문자열 또는 숫자일 수 있습니다.

 

콤보 상자는 사용자가 값 목록(텍스트 또는 숫자)에서 선택할 수 있도록 하는 데 사용됩니다. 콤보 상자를 사용하여 키보드 및 마우스 이벤트를 바인딩하는 것도 가능합니다. 그러나 가장 중요한 것은 이와 관련된 가상 이벤트입니다. 이 가상 이벤트는 "<>"이며 사용자가 콤보 상자에서 선택을 할 때 트리거됩니다. 호출 가능(함수/클래스 메서드)은 bind() 메서드를 사용하여 이 이벤트에 바인딩할 수 있습니다.

 

현재() 메서드를 사용하여 콤보 상자에서 기본값을 선택할 수 있으며 원하는 값의 인덱스가 인수로 전달됩니다. 콤보 상자의 값은 목록이나 튜플에서 가져오기 때문에 인덱스는 "0"부터 시작합니다.

 

현재() 메서드가 콤보 상자 개체에 인수 없이 사용되면 현재 선택된 값의 인덱스를 반환하고 값이 선택되지 않은 경우 "-1"을 반환합니다. get() 메서드는 현재 선택한 콤보 상자 값을 반환합니다. set(value) 메서드를 사용하면 콤보 상자의 선택된 값을 인수로 전달된 값으로 설정할 수 있습니다.

 

다음 예제에서는 콤보 상자를 사용하여 RPI의 GPIO 핀을 채울 수 있습니다.

 

combo_LED_gpio = ttk.Combobox(LED_def, value=["GPIO 00 (27)", "GPIO 01 (28),
                                              "GPIO 07 (26)", "GPIO 08 (24),

 

콤보 상자 개체에 사용할 수 있는 다른 메서드에는 cget(), configure(), 식별(), instate() 및 state()가 있습니다.

 

콤보 상자는 Entry의 하위 클래스입니다. Entry 클래스에서 bbox(), delete(), icursor(), index(), insert(), selection() 및 xview() 메서드를 상속합니다.

 

Entry – 사용자로부터 한 줄의 텍스트 문자열을 허용합니다. Entry의 형태는 다음과 같습니다.

 

Entry 형식

 

Tkinter 또는 ttk 클래스의 Entry() 메서드를 사용하여 항목 개체를 인스턴스화하여 항목을 만들 수 있습니다. 항목 개체의 정의에는 다음 구문이 있습니다.

 

var = Entry(parent, [configuration options, ….)

 

다음은 entry를 만드는 코드입니다.

 

entry_LED_duration = Entry(LED_def)

 

entry object의 부모는 기본 창, 자식 창 또는 프레임이 될 수 있습니다. entry object에는 다음과 같은 구성 옵션이 있습니다.

 

Entry 문자열 설정

이름 의미 기본값 속성
show 기입창에 표시되는 문자 - 문자
textvariable 기입창에 표시할 문자열을 가져올 변수 - -
justify 기입창의 문자열이 여러 줄 일 경우 정렬 방법 center center, left, right

 

Entry 형태 설정

이름 의미 기본값 속성
width 기입창의 너비 0 상수
relief 기입창의 테두리 모양 flat flat, groove, raised, ridge, solid, sunken
borderwidth=bd 기입창의 테두리 두께 2 상수
background=bg 기입창의 배경 색상 SystemButtonFace color
foreground=fg 기입창의 문자열 색상 SystemButtonFace color
insertwidth 기입창의 키보드 커서 너비 2 상수
insertborderwidth 기입창의 키보드 커서 테두리 두께 0 상수
insertbackground 기입창의 키보드 커서 색상 SystemWindowText color
selectborderwidth 기입창의 문자열 블록처리 테두리 두께 0 상수
selectbackground 기입창의 문자열 블록처리 배경 색상 SystemHighlight color
selectforeground 기입창의 문자열 블록처리 문자열 색상 SystemHighlight color

 

Entry 형식 설정

이름 의미 기본값 속성
font 기입창의 문자열 글꼴 설정 TkDefaultFont font
cursor 기입창의 마우스 커서 모양 - 커서 속성
xscrollcommand 기입창의 가로스크롤 위젯 적용 - Scrollbar위젯.set

 

Entry 상태 설정

이름 의미 기본값 속성
state 상태 설정 normal normal, readonly, disabled
readonlybackground readonly 상태일 때 기입창의 배경 색상 SystemButtonFace color
disabledbackground disabeld 상태일 때 기입창의 배경 색상 SystemButtonFace color
disabledforeground disabeld 상태일 때 기입창의 문자열 색상 SystemDisabledText color

 

Entry 하이라이트 설정

이름 의미 기본값 속성
highlightcolor 기입창이 선택되었을 때 색상 SystemWindowFrame color
highlightbackground 기입창이 선택되지 않았을 때 색상 SystemButtonFace color
highlightthickness 기입창이 선택되었을 때 두께 (두께 설정) 0 상수

 

Entry 동작 설정

이름 의미 기본값 속성
takefocus Tab 키를 이용하여 위젯 이동 허용 여부 True Boolean
insertontime 기입창의 키보드 커서 깜빡임이 보이는 시간 600 상수(ms)
insertofftime 기입창의 키보드 커서 깜빡임이 보이지 않는 시간 300 상수(ms)

 

 

항목은 사용자로부터 숫자 또는 한 줄 텍스트 입력을 받는 데 사용됩니다. 사용자가 입력한 숫자 또는 텍스트 값은 Entry의 get() 메서드를 사용하여 검색할 수 있습니다. 콜러블은 명령 속성에 할당하여 상태(위젯의 상태가 아닌 항목의 내용 상태)의 변경 사항에 대해 항목에 바인딩할 수 있습니다.

 

일반적으로 콜러블은 데이터 유효성 검사를 위해 명령 속성을 통해 항목에 바인딩됩니다. 키보드 또는 마우스 이벤트는 bind() 메서드를 사용하여 항목에 바인딩할 수 있습니다. 이러한 경우 호출 가능(이벤트 핸들러)은 이벤트를 인수 중 하나로 갖습니다.

 

아래 메소드는 Entry 위젯에 사용할 수 있습니다.

이름 의미
insert(index, “문자열”) index 위치에 문자열 추가
delete(start_index, end_index) start_index부터 end_index까지의 문자열 삭제
get() 기입창의 텍스트를 문자열로 반환
index(index) index에 대응하는 위치 획득
icursor(index) index 앞에 키보드 커서 설정
select_adjust(index) index 위치까지의 문자열을 블록처리
select_range(start_index, end_index) start_index부터 end_index까지 블록처리
select_to(index) 키보드 커서부터 index까지 블록처리
select_from(index) 키보드 커서의 색인 위치를 index 위치에 문자로 설정하고 선택
select_present() 블록처리 되어있는 경우 True, 아닐 경우 False
select_clear() 블록처리 해제
xview() 가로스크롤 연결
        xview_scroll(num, str)                               가로스크롤의 속성 설정            

 

Text – 사용자의 여러 줄 텍스트를 문자열 개체로 받아들입니다. 사용 형태는 아래와 같습니다.

 

Text 위젯

 

텍스트 개체를 인스턴스화하여 텍스트 위젯을 만들 수 있습니다. 텍스트 객체는 Tkinter 또는 ttk 클래스의 Text() 메서드를 사용하여 인스턴스화할 수 있습니다. 텍스트 개체의 정의에는 다음 구문이 있습니다.

 

var = Text(parent, [configuration options, ….)

 

다음은 텍스트 위젯을 만드는 코드입니다.

 

text_cLCD_message = Text(cLCD_init) #cLCD_init is the name of parent frame or window

 

텍스트 개체의 부모는 기본 창, 자식 창 또는 프레임이 될 수 있습니다. 텍스트 개체에는 다음과 같은 구성 옵션이 있습니다.

 

이름 텍스트 의미
- y.x y 번째 줄 x 번째 문자
- 1.0 첫 번째 줄 첫 번째 문자
- y.0 y 번째 줄 첫 번째 문자
- y.end y 번째 줄 마지막 문자
tkinter.INSERT insert 삽입 커서의 위치
tkinert.CURRENT current 마우스 포인터에 가장 가까운 문자의 위치
tkinter.END end 텍스트의 마지막 문자 위치
tkinert.SEL_FIRST sel.firs t 블록처리 되었을 때의 앞 부분
tkinert.SEL_LAST sel.last 블록처리 되었을 때의 뒷 부분
- [마크] linestart 마크에서 앞의 행
- [마크] lineend 마크에서 뒤의 행
- [마크] wordstart 마크에서 단어의 앞

 

Text 텍스트 설정

이름 의미 기본값 속성
wrap 자동 줄 내림 설정 방법 char none, char, word
tabs 텍스트의 Tab 간격 56 상수
tabstyle 텍스트의 Tab 간격 형식 tabular tabular, wordprocessor
startline 텍스트의 데이터 저장소에 저장될 시작 줄 시작 줄 상수
endline 텍스트의 데이터 저장소에 저장될 마지막 줄 마지막 줄 상수
spacing1 텍스트의 상단 수직 간격 0 상수
spacing2 텍스트의 줄과 줄 사이 간격 0 상수
spacing3 텍스트의 하단 수직 간격 0 상수

 

Text 형태 설정

이름 의미 기본값 속성
width 텍스트의 너비 80 상수
height 텍스트의 높이 24 상수
relief 텍스트의 테두리 모양 flat flat, groove, raised, ridge, solid, sunken
borderwidth=bd 텍스트의 테두리 두께 1 상수
background=bg 텍스트의 배경 색상 SystemButtonFace color
foreground=fg 텍스트의 문자열 색상 SystemButtonFace color
insertwidth 텍스트의 키보드 커서 너비 2 상수
insertborderwidth 텍스트의 키보드 커서 테두리 두께 0 상수
insertbackground 텍스트의 키보드 커서 색상 SystemWindowText color
selectborderwidth 텍스트의 문자열 블록처리 테두리 두께 0 상수
selectbackground 텍스트의 문자열 블록처리 배경 색상 SystemHighlightText color
selectforeground 텍스트의 문자열 블록처리 문자열 색상 SystemHighlightText color
inactiveselectbackground 텍스트의 문자열 블록처리 중 다른 위젯 선택시 블록처리 배경 색상 - color
padx 텍스트의 테두리와 내용의 가로 여백 1 상수
pady 텍스트의 테두리와 내용의 세로 여백 1 상수

 

Text 형식 설정

이름 의미 기본값 속성
font 텍스트의 문자열 글꼴 설정 TkDefaultFont font
cursor 텍스트의 마우스 커서 모양 - 커서 속성
xscrollcommand 텍스트의 가로스크롤 객체 적용 - Scrollbar위젯.set
yscrollcommand 텍스트의 세로스크롤 객체 적용 - Scrollbar위젯.set
exportselection 텍스트의 선택 항목 여부 설정 True Boolean
setgrid 텍스트의 격자 크기 조정 설정 False Boolean

 

Text 상태 설정

이름 의미 기본값 속성
state 상태 설정 normal normal, disabled

 

Text 하이라이트 설정

이름 의미 기본값 속성
highlightcolor 텍스트가 선택되었을 때 색상 SystemWindowFrame color
highlightbackground 텍스트가 선택되지 않았을 때 색상 SystemButtonFace color
highlightthickness 텍스트가 선택되었을 때 두께 (두께 설정) 0 상수

 

Text 동작 설정

이름 의미 기본값 속성
takefocus Tab 키를 이용하여 위젯 이동 허용 여부 False Boolean
blockcursor 텍스트의 키보드 커서를 블록으로 사용 False Boolean
undo 텍스트의 실행 취소 사용 여부 False Boolean
maxundo 텍스트의 실행 취소 최대 횟수 - 상수
autoseparators 텍스트의 실행 취소 자동 저장 여부 True Boolean

 

텍스트 위젯에는 명령 및 텍스트 변수 속성이 없습니다. 사용자가 Text 위젯에 입력한 여러 줄 텍스트는 get() 메서드를 사용하여 검색할 수 있습니다. 키보드 또는 마우스 이벤트는 bind() 메서드를 사용하여 Text 위젯에 바인딩할 수 있습니다. 텍스트 위젯은 텍스트 콘텐츠의 형식 지정에 유용한 탭, 표시 및 색인과 같은 일부 도우미 구조를 지원합니다. 텍스트 위젯에는 다음 메서드를 사용할 수 있습니다.

 

Text 문자열 메소드 

이름 기능 설명
insert(index, “문자열”) 문자열 삽입 해당 index 위치에 문자열을 삽입
delete(start_index, end_index) 문자열 삭제 start_index부터 end_index까지의 문자열 삭제
get(start_index, end_index) 문자열 반환 start_index부터 end_index까지의 문자열 반환
index(index) 인덱스 반환 index가 음수 일 경우, 1.0으로 반환
see(index) 문자열 표시 반환 index 위치에 텍스트가 표시되면 True 반환

 

Text 마크 매소드

이름 기능 설명
mark_set(mark, index) 마크 위치 설정 해당 마크의 위치 재설정
mark_unset(mark) 마크 위치 제거 해당 마크의 표시 제거
mark_gravity(mark,gravity) 키보드 커서 삽입 위치 변경 해당 마크 사용 시, 좌측 삽입 또는 우측 삽입으로 변경
index(mark) 마크 위치 반환 해당 마크 위치 반환
mark_names() 모든 마크 반환 텍스트에서 사용된 모든 마크를 반환

 

Text Tag 메소드

이름 의미 설명
tag_add(tagname, start_index, end_index) 태그 생성 start_index부터 end_index까지의 tagname을 생성
tag_remove(tagname, start_index, end_index) 태그 제거 start_index부터 end_index까지의 tagname의 설정 제거
tag_delete(tagname) 태그 삭제 tagname의 설정 및 선언 삭제
tag_config(tagname, 파라미터1, 파라미터2, …) 태그 부착 tagname 범위 만큼 속성 설정

 

텍스트 위젯에는 탭, 표시 및 색인에 대한 추가 메서드가 있습니다.

 

텍스트 위젯의 인덱스는 line_number.character_position 형식입니다. 따라서 "1.0"은 "1" 줄의 "0" 위치에 있는 문자를 나타냅니다.

 

linestart, lineend, insert, end, wordstart, wordend 및 chars와 같은 키워드는 인덱스 또는 인덱스의 일부로 사용할 수 있습니다.

 

예를 들어:

 

  • "2.2 linestart"는 2행의 첫 번째 문자를 나타냅니다.
  • "2.2 lineend"는 2행 끝에 있는 개행을 나타냅니다.
  • "2.0 + 3 chars"는 2행 이후 3개의 문자를 나타냅니다... 등등

 

Checkbutton – 사용자가 옵션에 대한 값을 선택할 수 있도록 합니다. 한 번에 둘 이상일 수 있습니다. 이 버튼은 사용자가 토글할 수 있는 이진 값을 보유합니다. 사용자가 값을 토글하면 명령 콜백이 호출될 수 있습니다. 체크 버튼의 사용 형태는 아래와 같습니다.

 

 

Checkbutton 개체를 인스턴스화하여 Checkbutton을 만들 수 있습니다. Checkbutton 객체는 Tkinter의 Checkbutton() 메서드 또는 ttk 클래스를 사용하여 인스턴스화할 수 있습니다. Checkbutton 개체의 정의에는 다음 구문이 있습니다.

 

var = Checkbutton(parent, [configuration options, ….)

 

다음은 체크 버튼을 생성하는 유효한 예입니다.

 

animation_flag = StringVar()
check_cLCD_animate = Checkbutton(cLCD_int, text = “Animate Text”, command = 
cLCD_Text_Animation, variable = animation_flag) #cLCD_init is the name of parent frame or window

 

Checkbutton의 부모는 기본 창, 자식 창 또는 프레임이 될 수 있습니다. Checkbutton에는 다음과 같은 구성 파라메터가 있습니다.

 

여기

 

체크 버튼은 한 번에 설정하거나 지울 수 있으며 변수와 쌍을 이루어 토글 상태를 계속 확인할 수 있습니다. "onvalue" 및 "offvalue" 속성을 설정하면 상태가 변경될 때 부울이 아닌 값을 검색할 수 있습니다.

 

콜러블을 명령 속성에 할당하여 사용자 상호 작용 중에 코드 동작을 실행할 수 있습니다. invoke() 메소드를 사용하여 콜러블을 실행할 수도 있습니다.

 

키보드 또는 마우스 이벤트를 Checkbutton에 바인딩하기 위한 논리가 없습니다. 그러나 마우스 이벤트는 일종의 그래픽 효과를 위해 bind() 메서드를 사용하여 Checkbutton에 바인딩할 수 있습니다.

 

확인 버튼에는 다음과 같은 메소드를 사용할 수 있습니다.

이름 기능
select() 체크 상태
deselect() 해제 상태
toggle() 토글
invoke() 체크 버튼 실행
flash() 깜빡임

 

라디오 버튼 – 사용자가 옵션에 대한 여러 값에서 하나의 값만 선택할 수 있습니다. 탭 키를 사용하여 사용 가능한 값을 탐색할 수 있습니다. 라디오 버튼 그룹은 단일 변수와 연결되어야 하며 각각은 고유한 값을 보유해야 합니다.

 

Radiobutton 사용 형태는 아래와 같습니다.

 

https://www.pythontutorial.net/tkinter/tkinter-radio-button/

 

Radiobutton 개체를 인스턴스화하여 Radiobutton을 만들 수 있습니다. Radiobutton 객체는 Tkinter 또는 ttk 클래스의 Radiobutton() 메서드를 사용하여 인스턴스화할 수 있습니다. Radiobutton 객체의 정의에는 다음 구문이 있습니다.

 

var = Radiobutton(parent, [configuration options, ….)

 

이것은 라디오 버튼을 생성하기 위한 유효한 예입니다:

 

watch_mode = StringVar()
radio_datetime_mode = Radiobutton(watch_int, variable = watch_mode, text = “Display only Date and Time”) #watch_init is the name of parent frame or window
radio_datetimetemp_mode = Radiobutton(watch_int, variable = watch_mode, text = “Display Date Time and Temperature”)
radio_datetime_temp_hum_mode = Radiobutton(watch_int, variable = watch_mode, text = “Display Date Time, Temperature and Humidity”)

 

라디오 버튼의 부모는 기본 창, 자식 창 또는 프레임이 될 수 있습니다. 라디오 버튼에는 다음과 같은 구성 옵션이 있습니다.

 

또한 제어 변수는 라디오 버튼의 상태를 추적할 수 있으며 선택한 라디오 버튼에 할당된 숫자 또는 문자열 값을 보유할 수 있습니다. 콜러블을 command 속성에 할당하여 Radiobutton 객체에 코드 동작을 추가할 수 있습니다.

 

invoke() 메소드를 사용하여 콜러블을 실행하는 것도 가능합니다. 그러나 일부 마우스 이벤트를 사용하여 라디오 버튼의 특정 그래픽 효과를 애니메이션할 수는 있지만 bind() 메서드를 사용하여 라디오 버튼에 키보드 또는 마우스 이벤트를 바인딩하는 것은 의미가 없습니다.

 

라디오 버튼에는 다음과 같은 메서드가 있습니다.

이름 기능
select() 체크 상태
deselect() 해제 상태
invoke() 체크 버튼 실행
flash() 깜빡임

 

Button – 사용자가 특정 작업을 실행할 수 있습니다. 목적을 나타내기 위해 버튼에 텍스트나 이미지를 표시할 수 있습니다. 버튼은 사용자가 눌렀을 때 실행되어야 하는 콜러블과 연결되어 있습니다. 버튼 사용 형태는 아래과 같습니다.

 

Button

 

Button 개체를 인스턴스화하여 Button을 만들 수 있습니다. Button 객체는 Tkinter의 Button() 메서드나 ttk 클래스를 사용하여 인스턴스화할 수 있습니다. Button 개체의 정의에는 다음 구문이 있습니다.

 

var = Button(parent, [configuration options, ….)

 

다음은 Button 생성에 대한 유효한 예입니다.

 

button_LED_signal = Button(LED_def, text = “Generate Signal”, command = 
thread_generate_LED_signal) #LED_def is name of parent window or frame

 

Button의 부모는 기본 창, 자식 창 또는 프레임이 될 수 있습니다. 버튼에는 다음과 같은 구성 옵션이 있습니다.

 

명령 속성에 콜러블을 할당하여 버튼에 코드 동작을 추가할 수 있습니다. Callable은 Button 객체의 invoke() 메서드를 사용하여 실행할 수도 있습니다.

 

기본적으로 콜러블은 사용자가 버튼을 누를 때 실행되어야 합니다. 다른 키보드 또는 마우스 이벤트를 Button 개체에 바인딩할 필요가 없습니다. 그러나 키보드 단축키를 통해 작업을 실행해야 하는 경우 bind() 메서드를 사용하여 일부 키보드 이벤트를 버튼에 바인딩하는 것이 유용할 수 있습니다.

 

이러한 위젯을 사용하여 RPi 레시피에 대한 대부분의 인터페이스를 설계할 수 있습니다. 레시피의 GUI에 다른 위젯을 포함하면 그때 소개하겠습니다.

 

다음 튜토리얼에서 Tkinter/TTK 메뉴, 레이아웃 관리, 이벤트 바인딩 및 멀티 스레딩을 논의 할 것이다. 이것은 첫 번째 Raspberry Pi 레시피인 LED 드라이버를 테스트하기에 충분합니다.

 

스스로 해 볼 것.

 

마이크로컨트롤러에 대한 배경 지식이 있는 경우 임베디드 작업을 제어하는 ​​데 다른 Tkinter/ttk 위젯의 사용을 추측해 보십시오. 예를 들어, 스케일 위젯을 사용하여 PWM 신호의 듀티 사이클을 제어하거나 DC 모터의 속도를 제어할 수 있습니다.

 

버튼을 누를 때 문자 LCD에 전달될 수 있는 문자 메시지를 포함하기 위해 Entry 또는 Text 위젯을 사용할 수도 있습니다. 마이크로컨트롤러 경험에서 임베디드 애플리케이션에서 다른 Tkinter/ttk 위젯을 사용할 수 있는 상황에 대해 생각해 보십시오. 또한 센서에서 데이터를 읽을 수 있는 상황을 상기하십시오.

 

이러한 상황과 Tkinter/ttk 위젯을 사용하여 다른 하드웨어 구성 요소를 제어할 때 직면할 수 있는 가능한 어려움을 평가해 보십시오.

 

한 가지 예는 텍스트 위젯에 "텍스트 변수" 또는 명령 속성이 없다는 것입니다. 이 경우 텍스트 위젯에서 문자 LCD로 동적 문자 메시지를 전달할 수 있습니까? 브레인스토밍 시작! 

 

 

참고

Tkinter and TTK widgets 

Python tkinter 강좌 : 제 26강 - Combobox 

Python Tkinter Label Widget 

How To Create ComboBox In TKinter Python 

Tkinter Radio Button

 

 

 

반응형