본문 바로가기
프로그래밍/파이썬

[파이썬 GUI] tkinter 4(버튼 사용하기/버튼의 기능 만들기)

by 인성패밀리 2022. 10. 21.
반응형

이번에는 GUI에서 특정 기능이 발휘 될 수 있는 버튼 위젯을 사용하는 방법을 알아보겠습니다.

 

1. 버튼 기본 사용방법

2. 버튼 속성

3. 버튼을 이용한 Label 위젯의 text변경

 

1. 버튼 기본 사용방법

바로 코드를 통해서 알아보겠습니다.

from tkinter import *

def but():
    print("기능 실행")

gui = Tk()
gui.title("버튼 사용하기")
gui.geometry("400x300+300+300")

# 기본 사용법
Button(gui, text="버튼이당", command=but).pack()

gui.mainloop()

이 코드의 실행 화면입니다.

버튼을 누르면 콘솔 화면에 다음과 같이 나타납니다.

버튼 클릭 결과

코드 설명입니다.

Button(gui, text="버튼이당", command=but).pack()

-> gui 프레임에 나타내고 버튼의 글자는 보이는 바와 같이 버튼이당이라는 글자입니다. 기능은 command에 함수 이름을 적는데 괄호를 빼고 적습니다. 괄호가 있으면 즉시 실행이 되며 mainloop를 통해서 코드가 반복 되기 때문에 계속 실행됩니다. 

-> 버튼을 클릭하게 되면 but 함수가 작동되는데 함수는 다들 알다싶이 코드의 윗 부분에 작성합니다. 함수에서 하고 싶은 코드를 작성하면 됩니다.

 

 

2. 버튼 속성

글자말고 이미지도 버튼에 넣을 수 있습니다. 보통 이미지는 사용을 하지 않으니 건너뛰겠습니다. 버튼 위젯은 글자 길이에 따라서 자동으로 늘어나는데 인위적으로 늘릴 수도 있습니다. 또한 버튼의 글자가 들어가니 폰트도 정할 수 있습니다.

from tkinter import *

def but():
    print("기능 실행")

def but2():
    print("기능 실행2")

gui = Tk()
gui.title("버튼 사용하기")
gui.geometry("400x300+300+300")

# 기본 사용법
Button(gui, text="버튼이당", command=but).pack()

click = Button(gui, text="1", command=but2, font=('consolas', 10, "bold"), width=10, height=2)
click.pack()

gui.mainloop()

이 코드의 실행 결과입니다.

버튼도 마찬가지로 변수에 담을 수 있습니다. 

 

속성을 보면 가로 10 세로 2라고 되어있는데 가로 10 세로 10으로 하면 정사각형이 나올 것 같지만 그렇지가 않습니다. 해보시면 위 아래가 길쭉한 직사각형이 나오게 됩니다.

 

이 속성들 말고도 테두리를 정하거나 꾸미는 다양한 옵션들이 있는데 전혀 그런 쪽으로 감각이 없어 저는 폰트를 바꾸거나 기본으로만 사용합니다...

 

3. 버튼을 이용한 Label 위젯의 text 변경해보기

바로 코드를 통해서 알아보겠습니다.

from tkinter import *


def push():
    txt['text'] = str(3*9)


gui = Tk()
gui.title("버튼 사용하기")
gui.geometry("400x300+300+300")

Button(gui, text="3 곱하기 9는?", font=('consolas', 30, 'bold'), command=push).pack()
txt = Label(gui, text="", font=('consolas', 30, 'bold'))
txt.pack()

gui.mainloop()

코드 실행 결과입니다.

버튼을 누르면?
이렇게 됩니다.

코드의 핵심은 Label 위젯을 만들 때 변수에 넣어준다는 점이고 그 다음은 함수 부분에 있는 코드입니다.

txt['text'] = str(3*9)

-> 형태를 보면 딕셔너리 구조임을 알 수 있습니다. 이런 식으로 위젯의 속성을 변경할 수 있습니다.

 

긴 글 읽어주셔서 감사합니다. 유익한 정보가 되었으면 좋겠습니다. 오류가 궁금한 점은 댓글로 남겨주시면 감사드리겠습니다.

반응형

댓글