달나라 노트

Python tkinter : Button (버튼) 본문

Python/Python tkinter

Python tkinter : Button (버튼)

CosmosProject 2022. 5. 17. 20:39
728x90
반응형

 

 

 

버튼은 클릭을 할 수 있으며 클릭을 할 때 어떤 기능을 하도록 할 수 있습니다.

 

일단 먼저 Window에 버튼을 띄워봅시다.

 

import tkinter as tk

window = tk.Tk()
window.geometry('500x400')

button = tk.Button(window, text='click')
button.place(x=0, y=0)

window.mainloop()

 

 

- button = tk.Button(window, text='click')

먼저 Button 객체를 생성합니다.

text는 버튼에 표시할 텍스트를 의미합니다.

 


- button.place(x=0, y=0)

버튼이 Window에 표시될 위치를 지정합니다.

 

 

일단 이 코드에서 알 수 있는 것이 하나 있습니다.

Button class의 사용법은 Label class와 거의 동일합니다.

 

아래 링크를 참고하면 굉장히 도움이 됩니다.

 

https://cosmosproject.tistory.com/610

 

Python tkinter : Label (라벨, 문자 띄우기)

tkinter의 Label은 Window에 텍스트를 보여주는 역할을 합니다. 텍스트를 담아서 보여주는 박스라고 생각하면 됩니다. 간단한 사용법을 먼저 알아보고 Label method에 적용할 수 있는 여러 옵션들을 알아

cosmosproject.tistory.com

 

 

 

 

근데 위처럼 그냥 버튼을 생성만해두면 버튼을 클릭해도 아무 일이 벌어지지 않습니다.

 

버튼을 클릭했을 때 어떤 함수를 실행할지를 지정해줘야하죠.

 

아래 코드를 봅시다.

 

import tkinter as tk

window = tk.Tk()
window.geometry('500x400')

label = tk.Label(window, text='Base')
label.place(x=0, y=0)

def change_text():
    label.config(text='Button Clicked')

button = tk.Button(window, text='click', command=change_text)
button.place(x=0, y=30)

window.mainloop()

 

위 코드는 Label과 Button을 하나씩 생성한 코드입니다.

그리고 버튼을 클릭하면 changed_text 함수가 실행하도록 한 코드입니다.

 

- button = tk.Button(window, text='click', command=change_text)

이를 위해선 Button 객체의 command 옵션에 버튼이 클릭되었을 때 실행할 함수 이름을 적어주면 됩니다.

 

- def change_text():
-     label.config(text='Button Clicked')

그리고 change_text 함수를 보면 label의 config method를 이용해 label의 text를 Button Clicked로 바꾸는 기능을 가지고 있습니다.

 

여기까지 해서 버튼의 기능을 예상해보자면, 버튼을 클릭하면 Label의 텍스트가 변할 것 같네요.

실제로도 그런지 테스트해봅시다.

 

 

 

 

실행하면 일단 위같은 화면이 뜹니다.

여기서 버튼을 클릭해봅시다.

 

 

그러면 위처럼 Label에 표시되는 텍스트가 변한 것을 볼 수 있죠.

 

 

 

 

 

 

 

 

import tkinter as tk

window = tk.Tk()
window.geometry('500x400')

label = tk.Label(window, text='Base')
label.place(x=0, y=0)

def change_text():
    label['text'] = 'New text'

button = tk.Button(window, text='click', command=change_text)
button.place(x=0, y=30)

window.mainloop()

 

위와 동일한 기능을 가진 코드를 위처럼 수정할 수 있습니다.

수정된 부분은 change_text() 함수의 내용입니다.

 

 

 

 

def change_text():
    label.config(text='Button Clicked')

 

def change_text():
    label['text'] = 'New text'

 

위처럼 Label 같은 어떤 객체의 속성에 접근해서 그 속성을 바꿀 때에는 config method를 사용해도 됩니다.

 

하지만 두 번째 방법처럼 단순히 label['text']의 형태로 dictionary에 접근하듯이 할 수도 있습니다.

 

dictionary에 접근하는 방식으로 하는 것이 훨씬 더 간단하죠.

 

 

import tkinter as tk

window = tk.Tk()
window.geometry('500x400')

label = tk.Label(window, text='Base')
label.place(x=0, y=0)

def change_text():
    label['text'] = 'New Text'
    print(label['text'])

button = tk.Button(window, text='click', command=change_text)
button.place(x=0, y=30)

window.mainloop()

 

change_text() 함수에 print를 이용해서 label['text']를 출력하게 하면 버튼을 누를 때 마다 Label에 적용된 텍스트가 python 실행 콘솔화면에 에 출력되는걸 볼 수 있습니다.

 

 

 

 

 

 

 

 

 

 

import tkinter as tk

window = tk.Tk()
window.geometry('500x400')

label = tk.Label(window, text='Base')
label.place(x=0, y=0)

idx = 0

def change_text():
    global idx
    idx = idx + 1
    label.config(text=str(idx))

button = tk.Button(window, text='click', command=change_text,
                   width=10, height=3,
                   foreground='#5ed7ff', background='#ff0051',
                   highlightthickness=6, highlightbackground='#b412ff'
button.place(x=0, y=30)

window.mainloop()

 

 

위 예시는 button의 여러 속성들을 추가한 예시입니다.

 

기본적으로 Label의 속성과 거의 비슷합니다.

 

아래 Label 링크를 참고하면 옵션 사용에 도움이 됩니다.

 

https://cosmosproject.tistory.com/610

 

Python tkinter : Label (라벨, 문자 띄우기)

tkinter의 Label은 Window에 텍스트를 보여주는 역할을 합니다. 텍스트를 담아서 보여주는 박스라고 생각하면 됩니다. 간단한 사용법을 먼저 알아보고 Label method에 적용할 수 있는 여러 옵션들을 알아

cosmosproject.tistory.com

 

 

 

 

 

 

Button의 특이한 옵션에 대해 알아봅시다.

바로 repeatdelay와 repeatinterval입니다.

 

repeatdelay와 repeatinterval 옵션은 동시에 사용되어야합니다.

또한 위 옵션은 버튼을 그냥 한번 클릭하고 마우스를 떼는게 아니라 버튼을 누르고 있을 때 버튼의 기능이 실행되는 간격을 조절해주는 속성입니다.

 

repeatdelay = integer

repeatdelay는 버튼을 꾹 누른 상태를 유지할 때 repeatdelay에 전달된 시간(단위는 ms=millisecond) 후에 버튼의 기능이 실행되도록 합니다. (주의할 점은 버튼을 누르고 떼는게아니라 버튼을 꾹 누르고 할때를 의미합니다.)

 

repeatinterval = integer

버튼을 꾹 누르고있을 때 repeatdelay만큼의 시간이 지나면 버튼의 기능이 실행된다고 했습니다.

이 상황에서 계속 버튼을 누른 상태를 유지하면 버튼의 기능이 계속 실행되는데 그 기능이 실행되는 간격을 의미합니다.

마찬가지로 단위는 밀리초(ms = millisecond)입니다.

 

import tkinter as tk

window = tk.Tk()
window.geometry('500x400')

label = tk.Label(window, text='Base')
label.place(x=0, y=0)

idx = 0

def change_text():
    global idx
    idx = idx + 1
    label.config(text=str(idx))

button = tk.Button(window, text='click', command=change_text,
                   repeatdelay=1000, repeatinterval=100
                   )
button.place(x=0, y=30)

window.mainloop()

 

위 예시를 봅시다.

 

위 예시는 idx 변수를 0부터 시작해서 버튼이 눌릴 때 마다 idx를 1씩 증가시켜 Label에 표시해주는 코드입니다.

 

근데 버튼에 아래와 같은 속성이 정해져있습니다.

 

- repeatdelay=1000, repeatinterval=100

이 속성을 해석해보면

버튼을 꾹 누른채로 유지할 때 repeatdelay로 지정된 1000ms(= 1초)가 지나면 버튼의 command가 실행되기 시작합니다.

 

이 상태에서 계속 버튼을 누르고 있으면 repeatinterval로 지정된 100ms(=0.1초) 마다 버튼의 command가 실행됩니다.

 

 

실제로 코드를 실행하면 위같은 화면이 나옵니다.

 

버튼을 그냥 한두번 클릭해봅시다.

 

 

 

그러면 클릭할 때 마다 Label에 표시된 숫자가 하나씩 증가하며 표시됩니다.

 

 

 

 

자 그러면 위 상태에서 버튼을 꾹 누르고있어봅시다.

 

그러면 1초(repeatdelay) 후부터 0.1초(repeatinterval)마다 숫자가 계속 증가하는걸 볼 수 있습니다.

 

 

 

 

 

 

728x90
반응형
Comments