- [tkinter] Button 및 Button Event 처리 목차
1. 버튼 생성
from tkinter import *
import tkinter.ttk as ttk
root = Tk()
Button(root,text="Open")
root.mainloop()
윈도우(창)이 하나 열리면서 Open으로 표시되는 Button이 생성된다
2. Button 설정 예제
btn_one = Button(root, text="4인 ", width=12, command= lambda: select_person(4))
btn_one.configure( font = ( 'Ubuntu Condensed', 15, 'bold'))
btn_one.pack(side="right", padx=5, pady=5)
- root 창에 버튼을 하나 추가한다.
- text="4인 "
버튼에 표시되는 내용이다
- width=12
버튼의 가로 길이를 나타낸다
height는 세로 길이를 나타낸다
- command= lambda: select_person(4)
버튼이 눌렸을 때 select_person( ) 함수를 수행한다.
select_person( ) 함수
- btn_one.configure
버튼에 대해 추가적인 설정을 할 수 있다
예) btn_one.configure( font = ( 'Ubuntu Condensed', 15, 'bold'))
=> 버튼에 표시되는 글자의 폰트를 'Ubuntu Condensed', 크기는 15, Bold 체로 설정한다.
- btn_one.pack(side="right", padx=5, pady=5)
부모 창(root)에 버튼을 추가하여, 화면에 출력되게 한다.
- padx=5, pady=5
다른 윗젯과 x-축 5, y-축 10 만큼 간격을 벌린다
3. 버튼이 눌렸을 경우 함수를 호출하는 방법
1) 위의 예제처럼 사용
command= lambda: select_person(4)
고정된 인자값 4만 전달된다.
2) 동일한 함수를 부르지만 생성된 인자값이 변한 것을 보내고 싶을 경우
아래의 예제는 버튼에 표시되는 값이 for문을 수행할 때마다 변경되기를 바라는 예제이다
- 항상 동일한 인자 값만 전달된다.
for i in range(5):
newButton = tk.Button(root, text=str(i+1), command=lambda: Board.playColumn(i+1, Board.getCurrentPlayer())) Board.boardButtons.append(newButton)
- for 문에서 i 값이 변할 때 마다 변한 i 값을 전달하고 싶은 경우
i 값을 그대로 사용하면 안되고 다른 변수..여기서는 j로 전환하여 전달해야 한다
import Tkinter as tk
for i in range(boardWidth):
newButton = tk.Button(root, text=str(i+1), command=lambda j=i+1: Board.playColumn(j, Board.getCurrentPlayer())) Board.boardButtons.append(newButton)
3) lambda 를 사용하지 않는 방법
표준 라이브러리 functools 에서 다음과 같이 partial을 사용하여 수행 할 수도 있습니다.
from functools import partial
#(...)
action_with_arg = partial(action, arg)
button = Tk.Button(master=frame, text='press', command=action_with_arg)
4. 버튼의 모양을 변경하고 싶은 경우
https://stackoverflow.com/questions/36328547/changing-the-shape-of-tkinter-widgets
'python & 라즈베리파이' 카테고리의 다른 글
[Python] Tkinter의 Canvas 사용 (0) | 2020.08.27 |
---|---|
[tkinter] 그림파일 출력 방법 (0) | 2020.08.27 |
[Tkinter] Listbox 사용법 (0) | 2020.08.25 |
[python] 터미날 수신 Byte 코드 변환 및 \n 제거 (0) | 2020.08.24 |
[라즈베리파이] 리눅스 가상 시리얼 포트 설정(socat) (0) | 2020.08.21 |