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

Popular posts from this blog

c++ - No viable overloaded operator for references a map -

java - Custom OutputStreamAppender not run: LOGBACK: No context given for <MYAPPENDER> -

java - Cannot secure connection using TLS -