what is the difference between a variable and StringVar() of tkinter

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP



what is the difference between a variable and StringVar() of tkinter



Code:


import tkinter as tk
a = "hi"
print(a)
a1 = tk.StringVar()
a1.set("Hi")
print(a1)



Output:


hi ##(Output from first print function)

AttributeError: 'NoneType' object has no attribute '_root' (Output from second print function)



My question:



What is the difference between a and a1 in above code and their use-cases. Why a1 is giving error?


a


a1


a1




3 Answers
3



Tkinter is a wrapper around an embedded tcl interpreter. StringVar is a class that provides helper functions for directly creating and accessing such variables in that interpreter. As such, it requires that the interpreter exists before you can create an instance. This interpreter is created when you create an instance of Tk. If you try to create an instance of StringVar before you initialize tkinter, you will get the error that is shown in the question.


StringVar


Tk


StringVar



Once tkinter has been properly initialized and a StringVar instance has been created, it can be treated like any other python object. It has methods to get and set the value that it represents.


StringVar





I am new to Python. So, it would be great if you could explain your points with an example. This way I can understand quickly.
– Msquare
Aug 13 at 6:00



StringVar() is a class from tkinter. It's used so that you can easily monitor changes to tkinter variables if they occur through the example code provided:


StringVar()


def callback(*args):
print "variable changed!"

var = StringVar()
var.trace("w", callback)
var.set("hello")



This code will check if var has been over-written (this mode is defined by the w in var.trace("w", callback).


var


w


var.trace("w", callback)



A string such as "hello" is just a data type, it can be manipulated and read and all sorts, the primary difference is that if the string was assigned to a variable, such as a = 'hello', there is no way of telling if a has changed (i.e if now a = 'hello') unless you do a comparison somewhere which could be messy.


"hello"


a = 'hello'


a


a = 'hello'



Put it simply: StringVar() allows you to easily track tkinter variables and see if they have been read, overwritten, or if they even exist which you can't easily do with just a typical a = 'hello'


StringVar()


a = 'hello'



Helpful : http://effbot.org/tkinterbook/variable.htm



Edit : Replaced 'variables' with 'tkinter variables' where appropriate as per @Bryan Oakley's suggestion





I think your answer would be better if instead of "variables" you used something like "tkinter variables". You can't use a StringVar to monitor changes in ordinary variables, but your answer makes it sound like you can. Otherwise, it's a good answer.
– Bryan Oakley
Aug 10 at 12:49


StringVar



A StringVar() is used most commonly to edit widget's text very quickly



For example:


import tkinter as tk


root = tk.Tk()
my_string_var = tk.StringVar()
my_string_var.set('First Time')
tk.Label(root, textvariable=my_string_var).grid()
root.mainloop()



Will have an output with a label saying First Time
NOTE:textvariable has to be used when using string variables


First Time


textvariable



And this code:


import tkinter as tk

def change():
my_string_var.set('Second Time')

root = tk.Tk()
my_string_var = tk.StringVar()
my_string_var.set('First Time')
tk.Label(root, textvariable=my_string_var).grid()
tk.Button(root, text='Change', command=change).grid(row=1)
root.mainloop()



Produces a label saying First Time and a button to change it EASILY to Second Time
This cant be done with a normal variable though, only tkinter's StringVar()


First Time


Second Time


StringVar()



Hopes this answers you!






By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Popular posts from this blog

make 2 or more post in bootsrap

Store custom data using WC_Cart add_to_cart() method in Woocommerce 3

Firebase Auth - with Email and Password - Check user already registered