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

생활/수경재배|2022. 4. 29. 05:24

이번에는 수경재배기 자동 컨트롤러에 사용할

button과 checkbutton 위젯을 추가 배치 해보도록 함.

 

이전 포스팅 게시글에 작성한 소스를 추가로 진행함.

저장은 iotmain.py로 저장.

 

● button ●

from tkinter import *
l1=Button(iotwin, text='LED 1', bg='white',command=lc1,font=('나눔바른펜OTF',35))
l2=Button(iotwin, text='LED 2', bg='white',command=lc2,font=('나눔바른펜OTF',35))
l3=Button(iotwin, text='LED 3', bg='white',command=lc3,font=('나눔바른펜OTF',35))
l4=Button(iotwin, text='LED 4', bg='white',command=lc4,font=('나눔바른펜OTF',35))
w1=Button(iotwin, text='물 펌프', bg='white',command=wc1,font=('나눔바른펜OTF',35))
o1=Button(iotwin, text='산소', bg='white',command=oc1,font=('나눔바른펜OTF',35))
st=Button(iotwin, text='설정', bg='white',command=stc,font=('나눔바른펜OTF',35))

l1.place(x=50, y=300, width=160, height=60)
l2.place(x=270, y=300, width=160, height=60)
l3.place(x=50, y=420, width=160, height=60)
l4.place(x=270, y=420, width=160, height=60)
w1.place(x=470, y=300, width=160, height=60)
o1.place(x=640, y=300, width=160, height=60)
st.place(x=840, y=300, width=160, height=60)

 

여기에선 l1~l4를 각각 LED1~LED4라는 이름으로 버튼위젯을 생성.

w1은 물펌프라는 이름의 버튼 위젯

o1은 산소 이름의 버튼 위젯

st는 설정 이름의 버튼 위젯을 생성.

 

button위젯의 text는 button위젯에 텍스트를 나타내는 것이며

bg는 button위젯의 바탕 색상을 지정.

command는 클릭시 지정한 함수를 실행하게 됨.

 

즉, l1이라는 LED1 버튼을 클릭시 command에 지정한 lc1함수가 실행되는 것임.

 

마지막으로 font는 이전 포스팅 게시글에 설명했듯이

텍스트에 나타날 해당 폰트 및 크기를 지정.

여기서 폰트파일명을 지정하는 게 아니라, 폰트이름을 지정해야 하며

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

 

그리고 place는 위젯배치할 때 사용.

이것도 이전 포스팅 게시글에 설명함.

 

x=, y=는 해당 위젯 위치 좌표

width=, height= 는 해당 위젯 크기를 설정.

 

● Checkbutton ●

l1av=IntVar()
l2av=IntVar()
l3av=IntVar()
l4av=IntVar()
w1av=IntVar()
o1av=IntVar()

l1ab=Checkbutton(iotwin,text="자동",font=('나눔바른펜OTF',20),variable=l1av,command=l1avp)
l2ab=Checkbutton(iotwin,text="자동",font=('나눔바른펜OTF',20),variable=l2av,command=l2avp)
l3ab=Checkbutton(iotwin,text="자동",font=('나눔바른펜OTF',20),variable=l3av,command=l3avp)
l4ab=Checkbutton(iotwin,text="자동",font=('나눔바른펜OTF',20),variable=l4av,command=l4avp)
w1ab=Checkbutton(iotwin,text="자동",font=('나눔바른펜OTF',20),variable=w1av,command=w1avp)
#o1ab=Checkbutton(iotwin,text="자동",font=('나눔바른펜OTF',20),variable=w1av,command=w1avp)

l1ab.place(x=50, y=360, width=160, height=50)
l2ab.place(x=240, y=360, width=160, height=50)
l3ab.place(x=50, y=480, width=160, height=50)
l4ab.place(x=240, y=480, width=160, height=50)
w1ab.place(x=450, y=360, width=160, height=50)
#o1ab.place(x=620, y=360, width=160, height=50)

여기에서는 모든 Checkbutton위젯 텍스가 자동이라고 되어있는데

바로 위에 설명한 LED1~LED4, 그리고 물 펌프 위젯에 관한

자동 여부를 선택할 수 있는 소스가 되겠음.

 

이 위젯도 마찬가지로

iotwin은 위젯을 표시할 창

text는 Checkbutton위젯에 나타날 텍스트

font는 이전 게시물 내용과 같음, 상동.

 

여기선 Checkbutton위젯에 variable를 사용하였는데

체크 유무에 따라 저 변수값이 달라짐

그전에 먼저 해당 변수를 InVar()로 선언해줘야함.

 

InVar()은 정수형(integer, int)으로 선언해준다는 것으로

문자형(string, str)으로 선언해주는 StringVar

실수형(float)을 선언해주는 DoubleVar

참과 거짓(True, Flase or 0, 1)을 나타내는 BooleanVar 

등이 있으니, 잘 알아두는 게 좋을듯.

 

참고 필자는 예전에(.net이전) 변수가 숫자 같은경우는

문자형을 선언했다가 정수형으로 선언했다가 

이리저리 상황에 따라 숫자 같은 경우는 문자 혹은 정수, 실수형으로

왔다갔다 하기도 함.

숫자의 장점이기도...

그리고 command에 지정한 함수가 실행하면서

variable= 에 지정한 변수값에 따라

자동, 수동 기능으로 달라짐.

 

그리고 이전 포스팅한 게시글과 소스가 이어지므로 참고할 것.

 

작성후, 실행은

소스 맨 하단에

iotwin,mainloop() 라고 지정해 준뒤

iotmain.py로 저장한뒤, 실행해보면 됨.