If i click on the checkbox, i get this error:
command=lambda: clicked(Checkbutton1.get(), Button1_func))
NameError: name 'clicked' is not defined
because the checkbox is in the external file and requires command=lambda: clicked(Checkbutton1.get(), Button1_func)). I need the code setup to stay like mine, i.e. with the function clicked in the main file and not in page1, and and the use of variuous lambda.
I've tried importing clicked (as a parameter) in several ways, such as adding it into def __init__, but it doesn't work.
How can I fix? Thank you
Main file
import tkinter as tk
from tkinter import ttk
from page1 import *
root = tk.Tk()
root.geometry('480x320')
style = ttk.Style()
style.theme_use('default')
style.configure('TNotebook', tabposition='ws', background='white', tabmargins=0)
nb = ttk.Notebook(root)
nb.pack(fill='both', expand=1)
page1 = Page1(nb)
nb.add(page1, text='Page 1', compound='left')
datalist = []
def clicked(flag, func):
if flag:
datalist.append(func())
else:
datalist.remove(func())
def try_print():
if len(datalist) > 0:
print("ok")
button = tk.Button(root, text="Print", command= try_print())
button.place(x=60, y=100)
root.mainloop()
Page1 file
import tkinter as tk
from tkinter import ttk
class Page1(tk.Frame):
def __init__(self, master, **kw):
super().__init__(master, **kw)
Checkbutton1 = tk.IntVar()
def Button1_func():
x = "test"
return x
Button1 = tk.Checkbutton(self, text = "Checkbox1", variable = Checkbutton1, onvalue = 1, offvalue = 0, height = 1,
bg="white", foreground='black', activebackground="white", highlightthickness = 0,
command=lambda: clicked(Checkbutton1.get(), Button1_func))
Button1.place(x=10, y=30)
CodePudding user response:
It is more easier to pass clicked function to Page1 as an argument:
Main file:
import tkinter as tk
from tkinter import ttk
from page1 import Page1
def clicked(flag, func):
if flag:
datalist.append(func())
else:
datalist.remove(func())
print(datalist)
def try_print():
if len(datalist) > 0:
print("ok")
root = tk.Tk()
root.geometry('480x320')
style = ttk.Style()
style.theme_use('default')
style.configure('TNotebook', tabposition='ws', background='white', tabmargins=0)
nb = ttk.Notebook(root)
nb.pack(fill='both', expand=1)
page1 = Page1(nb, clicked) # pass clicked as an argument
nb.add(page1, text='Page 1', compound='left')
datalist = []
button = tk.Button(root, text="Print", command=try_print)
button.place(x=60, y=100)
root.mainloop()
page1 file
import tkinter as tk
from tkinter import ttk
class Page1(tk.Frame):
# added clicked argument
def __init__(self, master, clicked, **kw):
super().__init__(master, **kw)
Checkbutton1 = tk.IntVar()
def Button1_func():
x = "test"
return x
Button1 = tk.Checkbutton(self, text = "Checkbox1", variable = Checkbutton1, onvalue = 1, offvalue = 0, height = 1,
bg="white", foreground='black', activebackground="white", highlightthickness = 0,
command=lambda: clicked(Checkbutton1.get(), Button1_func))
Button1.place(x=10, y=30)
