일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- PANDAS
- c#
- django
- PostgreSQL
- Python
- 파이썬
- Tkinter
- dataframe
- Apache
- Mac
- matplotlib
- gas
- SQL
- array
- hive
- Google Spreadsheet
- numpy
- math
- Google Excel
- google apps script
- Redshift
- Java
- PySpark
- GIT
- list
- Excel
- Github
- string
- Kotlin
- Today
- Total
달나라 노트
Python tkinter : Button (버튼) 본문
버튼은 클릭을 할 수 있으며 클릭을 할 때 어떤 기능을 하도록 할 수 있습니다.
일단 먼저 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
근데 위처럼 그냥 버튼을 생성만해두면 버튼을 클릭해도 아무 일이 벌어지지 않습니다.
버튼을 클릭했을 때 어떤 함수를 실행할지를 지정해줘야하죠.
아래 코드를 봅시다.
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
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)마다 숫자가 계속 증가하는걸 볼 수 있습니다.