Tkinter 버튼 명령에 인수를 전달하는 방법

Jinku Hu 2023년1월30일
  1. partials 를 사용하여 Tkinter Button 의 command 에 인수를 전달하십시오
  2. lambda기능을 사용하여 Tkinter Button 에서 command에 인수를 전달하십시오
Tkinter 버튼 명령에 인수를 전달하는 방법

Tkinter 의 command 옵션 Button 위젯은 사용자가 버튼을 누를 때 트리거됩니다. 일부 시나리오에서는 연결된 명령 함수에 인수를 전달해야하지만 아래처럼 인수를 전달할 수는 없었습니다.

button = tk.Button(app, text="Press Me", command=action(args))

인수를 명령 함수에 전달하는 두 가지 방법을 소개합니다.

partials 를 사용하여 Tkinter Button 의 command 에 인수를 전달하십시오

Python Tkinter tutorial에 설명 된 것처럼 functools 모듈에서 partial 객체를 사용하는 옵션이 있습니다.

from sys import version_info

if version_info.major == 2:
    import Tkinter as tk
elif version_info.major == 3:
    import tkinter as tk

from functools import partial


app = tk.Tk()
labelExample = tk.Button(app, text="0")


def change_label_number(num):
    counter = int(str(labelExample["text"]))
    counter += num
    labelExample.config(text=str(counter))


buttonExample = tk.Button(
    app, text="Increase", width=30, command=partial(change_label_number, 2)
)

buttonExample.pack()
labelExample.pack()
app.mainloop()
buttonExample = tk.Button(
    app, text="Increase", width=30, command=partial(change_label_number, 2)
)

partial(change_label_numer, 2)는 호출 될 때 func 처럼 동작하는 호출 가능한 객체를 반환합니다.

lambda기능을 사용하여 Tkinter Button 에서 command에 인수를 전달하십시오

Python lambda 연산자 또는 함수를 사용하여 Button 을 클릭 할 때 호출되는 임시 일회성 간단한 함수를 작성할 수도 있습니다.

from sys import version_info

if version_info.major == 2:
    import Tkinter as tk
elif version_info.major == 3:
    import tkinter as tk


app = tk.Tk()
labelExample = tk.Button(app, text="0")


def change_label_number(num):
    counter = int(str(labelExample["text"]))
    counter += num
    labelExample.config(text=str(counter))


buttonExample = tk.Button(
    app, text="Increase", width=30, command=lambda: change_label_number(2)
)

buttonExample.pack()
labelExample.pack()
app.mainloop()

람다 함수의 구문은 다음과 같습니다.

lambda: argument_list: expression

이 예제에서는 인수가 필요하지 않으므로 인수 목록을 비워두고 표현식 만 쓸 수 있습니다.

buttonExample = tk.Button(
    app, text="Increase", width=30, command=lambda: change_label_number(2)
)
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - Tkinter Button