【问题标题】:python 3 Tkinter Checkbutton valuepython 3 Tkinter Checkbutton值
【发布时间】:2018-10-30 12:45:19
【问题描述】:

大家好,我是 tkinter 的新手,我正在测试一些东西。 在这段代码中,我收到了错误“'Graphicaluserinterface' object has no attribute '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()

【问题讨论】:

    标签: python-3.x tkinter


    【解决方案1】:

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

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

    也就是说,您还需要将 IntVar() 更改为 tk.IntVar(),正如您所展示的那样,您正在执行 import tkinter as tk,因此所有 tkinter 小部件都需要一个 tk. 前缀。

    进行这 2 项更改,您的代码就可以正常工作了。

    【讨论】:

    • 啊哇谢谢它现在可以工作了 :) 我想我明白为什么操作顺序是必要的,但是你能详细说明为什么我需要将它更改为 tk.IntVar() 吗?
    • @James IntVar() 是一种 tkinter 方法。因为您将 tkinter 导入为 tk 所有 tkinter 方法都需要 tk. 前缀才能调用它们。此规则适用于所有导入的库。唯一可以只使用IntVar() 的方法是直接使用from tkinter import * 导入方法来导入tkinter 的所有内容,或者使用from tkinter import IntVar 直接导入IntVar。
    • 啊好的我现在明白了,问题是我使用了我在互联网上找到的另一个代码示例中的“import tkinter as tk”,因为“from tkinter import *”不适用于我的代码,我不明白为什么,因为语法明智,代码不应该改变?
    • 如果您首先从代码中删除所有 tk. 前缀,@James from tkinter import * 将起作用。也就是说,最好使用import tkinter as tk 来防止意外覆盖内置方法。
    • 当我想将这个类实现到我正在处理的其他代码中时,您是否还会推荐“import tkinter as tk”?
    猜你喜欢
    • 1970-01-01
    • 2016-06-16
    • 2018-05-17
    • 2023-04-07
    • 2017-01-18
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多