python object is NoneType even after declaring as global: ttk textbox
Peter Otten
__peter__ at web.de
Mon Jun 15 06:17:55 EDT 2020
emagnun wrote:
> I have a very simple script that retrieves the value from a text box upon
> click of a checkButton. But in click event, I'm receiving text box object
> as NoneType even after setting it as global. Pls help.
>
> Output: !!ERROR!! Tag is None
>
> ########### Source Code ###########
> from tkinter import *
> from tkinter import ttk
> import os
>
> def submitData():
> global tag
> global tagBox
You do not need the global declaration for tagBox as you do not rebind that
name.
> if (tagBox is not None):
> tag = tagBox.get("1.0","end-1c")
> print ("!!SUCESS!! tag -->", tag)
> else:
> print ("!!ERROR!! Tag is None")
>
> gui = Tk()
> gui.title("GUI")
> gui.geometry('250x300')
>
> tag = "NA"
> tagBoxLabel = Label(gui, text = "Tag: ").grid(column=0, row=5, pady=30,
> sticky="EN")
> tagBox = Text(gui, height=1, width=20).grid(column=1, row=5,
> pady=30, sticky="WN")
The grid() method always returns None. So tagBoxLabel, tagBox, and
submitButton are all bound to None.
To get a reference of the widget you need two steps:
# bind tagBox
tagBox = Text(...)
# define layout
tagBox.grid(...)
> submitButton = ttk.Button(gui, text="Submit", command=lambda:
> submitData()).grid(column=1, row=7)
> gui.mainloop()
Superfluous lambda alert: instead of
lambda: submitData()
just write
submitData
, i. e.:
ttk.Button(..., command=submitData).grid()
More information about the Python-list
mailing list