Msq*_*are 0 tkinter python-3.x
import tkinter as tk
a = "hi"
print(a)
a1 = tk.StringVar()
a1.set("Hi")
print(a1)
Run Code Online (Sandbox Code Playgroud)
hi ##(Output from first print function)
AttributeError: 'NoneType' object has no attribute '_root' (Output from second print function)
Run Code Online (Sandbox Code Playgroud)
是什么区别a,并a1在上面的代码及其使用情况。为什么a1给出错误?
StringVar()是来自 tkinter 的一个类。使用它以便您可以通过提供的示例代码轻松监控 tkinter 变量的更改:
def callback(*args):
print "variable changed!"
var = StringVar()
var.trace("w", callback)
var.set("hello")
Run Code Online (Sandbox Code Playgroud)
此代码将检查是否var已被覆盖(此模式由win var.trace("w", callback).
诸如此类的字符串"hello"只是一种数据类型,它可以被操作和读取以及各种类型的,主要区别在于,如果将字符串分配给变量,例如a = 'hello',则无法判断是否a已更改(即如果现在a = 'hello') 除非你在某处进行比较可能会很乱。
简而言之:StringVar()允许您轻松跟踪 tkinter 变量并查看它们是否已被读取、覆盖,或者它们是否存在,而您仅使用典型的变量就无法轻松做到这一点a = 'hello'
有用的:http : //effbot.org/tkinterbook/variable.htm
编辑:根据@Bryan Oakley 的建议,在适当的地方将“变量”替换为“ tkinter变量”
最常使用StringVar()快速编辑小部件的文本
例如:
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()
Run Code Online (Sandbox Code Playgroud)
将具有带有标签的First Time
注释输出:注意:textvariable在使用字符串变量时必须使用
这段代码:
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()
Run Code Online (Sandbox Code Playgroud)
产生一个标签上说First Time和一个按钮,即可轻松将其更改为Second Time
这是无法和正常的变量,虽然来完成,只有Tkinter的的StringVar()
希望这能回答您!
Tkinter 是嵌入式 tcl 解释器的包装器。StringVar是一个提供辅助函数的类,用于在该解释器中直接创建和访问此类变量。因此,它要求解释器存在才能创建实例。该解释器是在您创建 的实例时创建的Tk。如果您尝试在初始化 tkinter 之前创建 的实例StringVar,您将收到问题中显示的错误。
一旦 tkinter 被正确初始化并StringVar创建了一个实例,它就可以像任何其他 python 对象一样对待。它有方法来获取和设置它所代表的值。
| 归档时间: |
|
| 查看次数: |
7385 次 |
| 最近记录: |