[tkinter] Button 및 Button Event 처리

2020년 08월 25일 by 진아사랑해

    [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=12commandlambdaselect_person(4))

btn_one.configure( font = ( 'Ubuntu Condensed'15'bold'))

btn_one.pack(side="right"padx=5pady=5)

 

- root 창에 버튼을 하나 추가한다.

- text="4인 "

  버튼에 표시되는 내용이다

- width=12

  버튼의 가로 길이를 나타낸다 

  height는 세로 길이를 나타낸다

- commandlambda: 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=5pady=5)

  부모 창(root)에 버튼을 추가하여, 화면에 출력되게 한다.

- padx=5pady=

  다른 윗젯과 x-축 5, y-축 10 만큼 간격을 벌린다

 

3. 버튼이 눌렸을 경우 함수를 호출하는 방법

1) 위의 예제처럼 사용

  commandlambdaselect_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

 

Changing the shape of tkinter widgets

So I have a simple button: f1button3=Button(text="Database", command = lambda: DatabaseWidgets()).place(x=1,y=30) The buton is always a rectangle, but I want it to have curved edges, or possibly ...

stackoverflow.com

 

 

반응형