python 3 Tkinter Checkbutton值

时间:2018-10-30 12:45:19

标签: python-3.x tkinter

大家好,我是tkinter的新手,我正在测试东西。 在这段代码中,我收到了我无法理解的错误“'Graphicaluserinterface'对象没有属性'var'”,因为我在 init 方法中有了它。 我的代码:

import tkinter as tk

class Graphicaluserinterface(tk.Frame):

    def __init__(self,master=None):
        super().__init__(master)
        self.grid()
        self.create_widgets()
        self.startbuttonfunktion()
        self.checkbutton1
        self.var=IntVar()

    def create_widgets(self):
        self.programmstart = tk.Button(self, text = "Programmstart")
        self.programmstart.grid(row=0,column=1)
        self.programmstart["command"]=self.startbuttonfunktion

        self.programmschliessen = tk.Button(self, text ="Exit Programm",command=root.destroy)
        self.programmschliessen.grid(row=1,column=2)

        self.checkbutton1 = tk.Checkbutton(self, text = "Sensoren1",variable=self.var,onvalue=1,offvalue=0)
        self.checkbutton1.grid(row=1,column=0)

    def startbuttonfunktion(self):
        if self.var.get()==1:
            print("Der Checkbutton wurde geklickt")
        else:
            print("Der Checkbutton wurde NICHT geklickt")



root = tk.Tk()        
app = Graphicaluserinterface(master=root)
app.master.title("TestProgramm")
app.master.maxsize(1200,600)
app.mainloop()

1 个答案:

答案 0 :(得分:2)

问题在于操作顺序。您仅在运行其他方法之后才创建self.var IntVar。因此,当这些方法尝试访问self.var时,由于它们尚未创建而无法访问。

self.var=IntVar()移到self.create_widgets()上方。

也就是说,您还需要将IntVar()更改为tk.IntVar(),就像已经证明自己正在做import tkinter as tk一样,因此所有tkinter小部件都需要一个tk.前缀。

进行这两项更改,您的代码将可以正常工作。