使用ttkbootstrap时遇Python未解析引用'myvar'错误求助
解决Python中Unresolved reference 'myvar'错误
问题原因
myvar是定义在函数外部的全局变量,但在change()函数里直接修改它时,Python会默认把myvar当成局部变量。myvar += 1会先尝试读取局部变量myvar的值,此时局部变量还未定义,就会抛出"Unresolved reference 'myvar'"错误。
解决方案
方法1:用global关键字声明全局变量
在函数内部显式声明myvar是全局变量,让Python直接操作外部的全局变量:
my_label = ttk.Label(root, text="Click!", bootstyle=SUCCESS, font="Helvetica, 50") my_label.pack(pady=50) myvar = 0 def change(): global myvar # 声明myvar为全局变量 myvar += 1 if myvar & 2 == 0: my_label.config(text="Selam") else: my_label.config(text="BB")
方法2:用可变对象存储变量(避免使用global)
如果不想用global,可以用列表这类可变对象存数值,修改可变对象内部元素时不需要声明全局:
my_label = ttk.Label(root, text="Click!", bootstyle=SUCCESS, font="Helvetica, 50") my_label.pack(pady=50) myvar = [0] # 用列表存储数值 def change(): myvar[0] += 1 # 修改列表中的元素 if myvar[0] & 2 == 0: my_label.config(text="Selam") else: my_label.config(text="BB")
补充说明
你的条件myvar & 2 == 0是按位与操作,用来判断myvar的二进制第二位是否为0,逻辑本身没问题,如果是对应每2次切换一次文本的需求,这个写法是可行的。
内容的提问来源于stack exchange,提问作者sbzeyrek
相关产品推荐
相关产品推荐

