[수경재배기 자동 컨트롤러 제작] 6. 파이썬3(Python3) tkinter를 이용한 GUI 폼 제작 및 위젯 추가(Label)

생활/수경재배|2022. 4. 22. 04:50

일단, 필자는 이전에는 파이썬을 다뤄본 적이 없음.

따라서, 코딩이 지저분할 수 있으니 주의.

더 깔끔하고 더 간편한 코딩은 기대하지 않는게 좋을지도...

 

예전에 VB 같은 경우는 GUI폼에 위젯 배치할 때

드래그 앤 드롭 방식이라 

엄청 간편 했음.

 

파이썬에서는 Qt5로 간편하게 하는 방법이 있긴한데

그냥 파이썬에 기본적으로 있는 tkinter를 이용하여 

수경 재배기 자동 컨트롤러에 사용할 GUI 프로그래밍을 하기로 함.

 

 

● 폼 만들기 ●

tkinter를 이용하여 GUI 프로그래밍을 하려면 

우선 tkinter가 임포트가 되어야 한다.

import tkinter as tk
iotwin = tk.Tk()
iotwin.title("수경재배 iot")
iotwin.geometry('1024x540')
iotwin.resizable(False, False)

tkinter를 임포트하여 tk라고 별칭 지정.

tk라고 별칭을 지정해준 이유는 간편화하기 위해서 임.

 

iotwin변수에 Tk클래스 인스턴스를 생성.

위 코드에 보듯이 iotwin = tk.Tk() 로 되어있는데

tk라고 별칭을 지정해주지 않으면

iotwin = tkinter.Tk() 로 코드를 작성해야 됨.

그리고 iotwin변수에 Tk 클래스 인스턴스를 할당하지 않으면

코드길이가 길어지기 때문임.

별칭도 마찬가지고.

 

그리고 파이썬을 다뤄보다 알게 된 사실인데

변수 특성이라고 해야하나...

사전에 이런 걸 정의하지 않아도 별 문제 없는 듯(?)...

암튼 파이썬 초짜배기라서 그냥 뭐.. 넘어가기로 하고..

 

iotwin.title("타이틀 명")

폼 창이름 작성하는 명령어.

 

iotwin.geometry('해상도')

폼 창 해상도 지정 해주는 명령어.

필자는 7인치 터치스크린 사용하는데, 해상도는 1024x600 짤인데

라즈베리파이 상단바를 보이게 하려고, 1024x540으로 지정

한 것도 있고, 알리발 터치스크린이라 그런지 하단에 좀 짤리는 듯. ㅠ.ㅠ

 

iotwin.resizable(False, False)

폼 창 사이즈를 변경하지 않도록 하는 명령어.

즉, 폼 창 크기를 고정 시킬 때 사용.

False, False :  x, y 축 둘다 변경 불가.

True, False : x 변경 가능, y 변경 불가

혹은 숫자를 사용하여 정해진 해상도로 크기를 변경할 수 있게 함.

 

 

● Label ●

from tkinter import *
#현재시간 GUI
ntimelabel1=Label(iotwin, text="현재 시간",font=('나눔바른펜OTF',35))
ntimelabel=Label(iotwin)
ntimelabel.place(x=660,y=10, width=190, height=50)
ntimelabel1.place(x=500,y=10, width=150, height=50)

간단하게 Label 위젯을 추가한 소스 임.

 

폼 창을 생성한뒤, 위젯을 추가할 수 있는데

Label(iotwin, text="나타날 텍스트". font=('해당 OS에 설치된 폰트명', 크기))

여기서 폰트명은 폰트파일명이 아닌 폰트이름을 말하는 것임.

혼동하지 말것.

그리고 반드시 해당 OS에 폰트가 설치 되어 있어야 함.

필자도 첨에 헷갈렸음.

 

간단하게 설명하자면

ntimelabel1이라는 라벨 위젯에 iotwin 폼 창에

나눔바른펜 폰트 크기 35로 현재 시간이라는 텍스트를 나타나게 하고,

ntimelabel1 옆에 ntimelabel 라벨 위젯을 배치 시켜놓은 소스.

 

위젯 배치, 정렬에는

place를 사용하였는데,

이는 창 크기와 해상도를 고정시켜 놓았고

그리고 좌표값 입력해서 하는 게 

필자한테는 이게 편한 거 같아서 사용.

place외에도 pack, grid 도 있는데

grid는 엑셀이나, 워드 표 만들어서 꾸미는 듯한 느낌이 듬.

그리고 창 크기에 따라 창에 맞게 배치가 됨.

이건 자기 입맛대로 하면 될듯.

 

간단하게 설명하자면

place(x=xxx, y=yyy, width=xxx, height=xxx)

x, y는 위젯 위치를 설정하는 것이고,

width, height는 위젯 크기를 설정하는 것이다.