this question has answer here:
how can set 10 buttons each have different command using code:
line1 = ['q','w','e','r','t','y','u','i','o','p']
for n in range(10): tkinter.button(keyboard, text = line1[n], command = line1[n]).grid(column = n + 1, row = 0, padx = 1, pady = 1) current code:
line1 = ['q','w','e','r','t','y','u','i','o','p'] functions = [lambda: q(), lambda: w(), lambda: e(), lambda: r(), lambda: t(), lambda: y(), lambda: u(), lambda: i(), lambda: o(), lambda: p()] buttons = [] def q(): buttons[0].destroy() def selectcallback(n): global functions global buttons if n > 1: functions[2](n) else: functions[n]() n in range(10): buttons.append(tkinter.button(keyboard, text = line1[n], command = lambda n = n: selectcallback(n))) buttons[n].grid(column = n + 1, row = 0, padx = 1, pady = 1) when run causes error.
a callback callbacks!
probably not elegant solution can have 1 main function decides function use based on argument given button.
you need decide each value of n call.
edit: changed code answer comment
import tkinter keyboard = tkinter.tk() line1 = ['q','w','e','r','t','y','u','i','o','p'] buttons = [] def func0(): print("this 0's function") buttons[0].destroy() def func1(): print("this 1's function") buttons[1].destroy() def funcx(n): print("you idea...") buttons[n].destroy() functions = [lambda: func0(), lambda: func1(), lambda n: funcx(n)] def selectcallback(n): global functions global buttons # if `functions` filled out elements can neglect # if/else , call `functions[n]()` if n > 1: functions[2](n) else: functions[n]() n in range(10): buttons.append(tkinter.button(keyboard, text = line1[n], command = lambda n = n: selectcallback(n))) buttons[n].grid(column = n + 1, row = 0, padx = 1, pady = 1) keyboard.mainloop() important points:
-must keep reference buttons able delete them (buttons)
-must call .grid() on separate line not return none should button.
-if want delete buttons, not require different function each. example meant illustrate how have 10 different functions callbacks.
-additionally, example simplified: buttons [2:9] call 1 function , pass index don't have write out 10 functions. if want different function performs different operation each button, fill out functions list , remove if/else construct within selectcallback(n), , access each function directly index.
Comments
Post a Comment