2012-12-13 27 views
5

Tôi muốn chạy nhiều chức năng khi tôi nhấp vào nút. Ví dụ: tôi muốn nút của tôi trông giống nhưCó nhiều lệnh khi nhấn nút

self.testButton = Button(self, text = "test", 
         command = func1(), command = func2()) 

khi tôi thực hiện tuyên bố này tôi gặp lỗi vì tôi không thể phân bổ cái gì đó cho một đối số hai lần. Làm thế nào tôi có thể thực hiện lệnh thực hiện nhiều chức năng.

Trả lời

17

Bạn có thể tạo một hàm tổng quát để kết hợp chức năng, nó có thể trông giống như thế này:

def combine_funcs(*funcs): 
    def combined_func(*args, **kwargs): 
     for f in funcs: 
      f(*args, **kwargs) 
    return combined_func 

Sau đó, bạn có thể tạo nút của mình như sau:

self.testButton = Button(self, text = "test", 
         command = combine_funcs(func1, func2)) 
10
def func1(evt=None): 
    do_something1() 
    do_something2() 
    ... 

self.testButton = Button(self, text = "test", 
         command = func1) 

có thể?

Tôi đoán có lẽ bạn có thể làm một cái gì đó giống như

self.testButton = Button(self, text = "test", 
         command = lambda x:func1() & func2()) 

nhưng đó thực sự là tổng ...

+1

Xác định một chức năng để làm những gì bạn muốn có lẽ là tốt nhất dung dịch. Đặt một số logic trong nút chính nó tấn công tôi như icky, và một vấn đề bảo trì tiềm năng sau này. – PeterBB

1

Bạn có thể sử dụng lambda cho việc này:

self.testButton = Button(self, text = "test", lambda: [f() for f in [func1, funct2]]) 
2

Bạn chỉ có thể sử dụng lambda như thế này:

self.testButton = Button(self, text=" test", command=lambda:[funct1(),funct2()]) 
0

Button(self, text="text", command=func_1()and func_2)

+4

Mặc dù mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung về lý do và/hoặc cách mã này trả lời câu hỏi cải thiện giá trị lâu dài của nó. – adiga