Python 2.7 Tkinter,OOP和Callbacks

时间:2013-12-05 18:05:24

标签: oop python-2.7 tkinter

我刚刚开始拼凑一个简单的工具,用于打开投影机并在其上选择一些预设。我是从命令行使用它,但后来认为这将是开始学习Tkinter的一个很好的借口。我正在努力使用OOP设计,因为很明显你可以用功能等来做到这一点。当我开始添加更多功能和按钮时,对每个按钮进行一次关闭功能的特定回调似乎有点疯狂。工程师如何处理这个问题?

1 个答案:

答案 0 :(得分:2)

如果你有带有simillar函数的simillar按钮,你可以使用循环(for)创建那些按钮,你可以使用一个具有不同参数的函数。您必须使用lambda函数来调用带参数的函数。

(不完整)示例:

def my_func(a, b):
    print a, b

Button("Hello", command=lambda arg1="abc",arg2=123:my_func(arg1, arg2)).pack()
Button("World", command=lambda arg1="xyz",arg2=987:my_func(arg1, arg2)).pack()

您甚至可以使用list来保留所有按钮的参数。

def my_func(a, b):
    print a, b

buttons = (
   # title, x, y, function name, function arguments)
   ("Hello", 0, 0, my_func, ("abc", 123)),
   ("World", 0, 1, my_func, ("xyz", 987)),
)

for btn in buttons:
   title, x, y, func_name, func_args = btn

   temp = Button(title, command=lambda func=func_name, args=func_args:func(*args) )

   temp.grid(row=y, column=x)