Skip to main content
 首页 » 编程设计

python之Tkinter radiobutton IntVar 属性错误

2025年05月04日16hnrainll

我知道,当您使用单选按钮时,如果您想使用数字,则需要将变量设置为 IntVar()。不幸的是,我在下面运行的代码出现以下错误:

Traceback (most recent call last): 
  File "F:/Analysis and Maths/PD diagnostic tool/Project files/PD Tool v2.py", line 49, in <module> 
v = IntVar() 
File "C:\Python34\lib\tkinter\__init__.py", line 354, in __init__ 
Variable.__init__(self, master, value, name) 
File "C:\Python34\lib\tkinter\__init__.py", line 236, in __init__ 
self._root = master._root() 
AttributeError: 'NoneType' object has no attribute '_root' 

有人知道为什么会这样吗?我想做的是使用单选按钮更改加载到 pygame 中的图像

v = IntVar() 
 
class Window(Frame): 
def __init__(self, master=None): # This defines the main window 
     Frame.__init__(self, master) 
     self.master = master 
     self.init_window() 
 
def init_window(self): 
    global v 
    self.master.title("PD Tool") 
    self.pack(fill = BOTH, expand = 1) # This packs the frame 
    showImg(self) 
    import_button = ttk.Button(self, text = "import", command = lambda: filename()).place(x = 10, y = 5) 
    start_pygame_button = ttk.Button(self, text = "Start PD tool", command = lambda: 
    start_pygame_window()).place(x = 10, y = 35) 
    RadioButton1 = ttk.Radiobutton(self, text = "One", variable = v, value = 1).place(x = 10, y=220) 
    RadioButton2 = ttk.Radiobutton(self, text = "Two", variable = v, value = 2).place(x = 10, y=310) 
    RadioButton3 = ttk.Radiobutton(self, text = "Three", variable = v, value = 3).place(x = 10, y=410) 
    RadioButton4 = ttk.Radiobutton(self, text = "Four", variable = v, value = 4).place(x = 10, y=510) 
    RadioButton5 = ttk.Radiobutton(self, text = "Five", variable = v, value = 5).place(x = 10, y=600) 
    RadioButton6 = ttk.Radiobutton(self, text = "Six", variable = v, value = 6).place(x = 10, y=700) 
 
 
 
def active_image(): 
    global file_path 
    if v == 1: 
        file_path = "F:\Analysis and Maths\PD diagnostic tool\Images\one.png" 
        print(v) 
    elif v == 2: 
        file_path = "F:\Analysis and Maths\PD diagnostic tool\Images\wo.png" 
        print(file_path) 
    elif v == 3: 
        file_path = "F:\Analysis and Maths\PD diagnostic tool\Images\hree.png" 
    elif v == 4: 
        file_path = "F:\Analysis and Maths\PD diagnostic tool\Images\our.png" 
    elif v == 5: 
        file_path = "F:\Analysis and Maths\PD diagnostic tool\Images\ive.png" 
    elif v == 6: 
        file_path = "F:\Analysis and Maths\PD diagnostic tool\Images\six.png" 
    else: 
        file_path = "F:\Analysis and Maths\PD diagnostic tool\Images\one.png" 
 
    active_image_loaded = pygame.image.load(file_path) 
 
    gameDisplay.blit(active_image_loaded,(0,0)) 

请您参考如下方法:

您需要在创建 IntVar 对象之前创建根小部件。

调整代码,先创建一个根widget:

root = Tk()  # <--- 
v = IntVar()