Ниже приведен мой код для панели управления с 8 кнопками на ней.Доступ к списку кнопок в python Tkinter
from Tkinter import *
import ttk
class light_control(Frame):
def __init__(self,i,parent,root,ltext,btext):
Frame.__init__(self,parent)
self.lc_Label = Label(self,text=ltext).pack()
self.lc_Button = Button(self,
text=btext,
width=10,
command=lambda i=i:root.toggle_button(i)
).pack()
class mi_control_panel(Frame):
def __init__(self, master=Tk()):
Frame.__init__(self, master)
self.master = master
self.init_window()
def init_window(self):
self.grid()
self.master.title("Control Panel")
self.pack(fill=BOTH, expand=1)
self.master.attributes('-zoomed', True)
self.state = True
self.master.attributes("-fullscreen", self.state)
self.light_controls = []
self.render_notebook()
def toggle_button(self,x):
print self.light_controls[x].lc_Button
def render_notebook(self):
n = ttk.Notebook(self)
f1 = ttk.Frame(n)
text2 = Label(f1,text='Control Panel for Lights',relief='ridge')
text2.grid(row=0,column=0,columnspan=4)
for x in xrange(8):
b = light_control(x,f1,self,"Light "+str(x),"OFF")
self.light_controls.append(b)
for i in xrange(1,3):
for j in xrange(4):
self.light_controls[4*i+j-4].grid(row=i,column=j,padx='80',pady='30')
n.add(f1, text='Lights')
n.grid(row=0,column=0,sticky='EW')
micp = mi_control_panel()
micp.tk.mainloop()
Моя проблема в том, что когда я нажимаю кнопку, все, что я получаю, это None. Это вызвана функция toggle_button, но я не могу получить доступ к переменной lc_Button класса light_control. То, что я намереваюсь сделать, это создать список кнопок, прикрепленных к той же функции обратного вызова, которая идентифицирует, какая кнопка нажата и выполнить действие соответственно. Я могу напечатать переменную x в функции toggle_button. Он работает нормально. Любое руководство высоко ценится. Заранее спасибо.
вы пробовали вместо 'лямбда I = I: root.toggle_button (I)' 'этот код лямбда-я: корень. toggle_button (i) '? Вот как я определяю лямбда-функции. – Sens4
'lambda i: root.toggle_button (i)' дает ошибку 'TypeError:() принимает ровно 1 аргумент (0 задан)' –