user interface - Basic Python methods & GUI assistance -
i'm new programming , green if comes python itself. started learning few days ago , need understanding , making code simpler. i'm working on simple gui, i've created. works fine i'm wondering how mix tkinter button widgets methods dont have create different 1 every time create new widget. should include variable values quite hard me understand , that's why i've come here help. ;d here i'm posting shortened version, original includes 10 buttons can imagine how crappy looks
import tkinter tk def __init__(master): frame = frame(master) frame.pack() def toggle_text(): if button["text"] == "wl": button["text"] = "wyl" label["bg"] = "green" else: button["text"] = "wl" label["bg"] = "red" def toggle_text1(): if button1["text"] == "wl": button1["text"] = "wyl" label1["bg"] = "green" else: button1["text"] = "wl" label1["bg"] = "red" def toggle_text2(): if button2["text"] == "wl": button2["text"] = "wyl" label2["bg"] = "green" else: button2["text"] = "wl" label2["bg"] = "red" root = tk.tk() root.title("gui - test") button = tk.button( text="wl", width=12, command=toggle_text, bg='red') button.grid(row=0, column=1) label = tk.label(bg='red', width=6, text='1') label.grid(row=0, column=2) button1 = tk.button( text="wl", width=12, command=toggle_text1, bg='red') button1.grid(row=1, column=1) label1 = tk.label(bg='red', width=6, text='2') label1.grid(row=1, column=2) button2 = tk.button( text="wl", width=12, command=toggle_text2, bg='red') button2.grid(row=2, column=1) label2 = tk.label(bg='red', width=6, text='3') label2.grid(row=2, column=2) root.mainloop()
the common way define short callback wrapper function default arguments, in turns calls real event handler function arguments needs. here's example based on code:
import tkinter tk num_buttons = 3 button_list = [] label_list = [] def toggle_text(button_num): button = button_list[button_num] label = label_list[button_num] if button['text'] == 'wl': button['text'] = 'wyl' label['bg'] = 'green' else: button['text'] = 'wl' label['bg'] = 'red' root = tk.tk() root.title('gui - test') in range(num_buttons): # create widgets def _wrapper(button_num=i): # default argument value current index toggle_text(button_num) button = tk.button(text='wl', width=12, bg='red', command=_wrapper) button.grid(row=i, column=1) button_list.append(button) label = tk.label(text=i+1, width=6, bg='red') label.grid(row=i, column=2) label_list.append(label) root.mainloop()
in code above, text of each tk.label
set via text=i+1
argument in the
label = tk.label(text=i+1, width=6, bg='red')
statement. give each label own arbitrary text value, define list containing text each label, example:
label_text_list = ['l1', 'l2', 'l3', ...]
and use
label = tk.label(text=label_text_list[i], width=6, bg='red')
in loop instead.
also see generate tkinter buttons dynamically example.
Comments
Post a Comment