【问题标题】:Error with tkinter class [duplicate]tkinter 类出错 [重复]
【发布时间】:2016-10-22 23:12:33
【问题描述】:

我正在制作一个基本的温度转换器,我有它,所以你可以将摄氏度转换为 farenheight,现在我正在尝试制作它以便你可以切换。我有这个代码:

from tkinter import *
bool1 = True
class App:
    def __init__(self, master):
        frame = Frame(master)
        frame.pack()
        self.x = Label(frame, text = 'Celcius:').grid(row = 0, column = 0)
        self.c_var = DoubleVar()
        Entry(frame, textvariable = self.c_var).grid(row = 0, column = 1)
        self.z = Label(frame, text = 'Farenheight:').grid(row = 1, column = 0)
        self.result_var = DoubleVar()
        Label(frame, textvariable = self.result_var).grid(row = 1, column = 1)
        b1 = Button(frame, text = 'Switch', command = self.switch)
        b1.grid(row = 2, columnspan = 2)
        button = Button(frame, text = 'Convert', command = self.convert)
        button.grid(row = 3, columnspan = 2)
        return None
    def convert(self):
        c = self.c_var.get()
        c = c * (9/5) + 32
        self.result_var.set(c)
    def switch(self):
        global bool1
        if bool1 == True:
            bool1 = False
            self.x.config(text = 'Farenheight:')
        else:
            bool1 = True
            self.z['text'] = 'Celcius:'
root = Tk()
root.wm_title('Temp Converter')
app = App(root)
root.mainloop()

我得到的错误信息是:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\keith\AppData\Local\Programs\Python\Python35-    32\lib\tkinter\__init__.py", line 1550, in __call__
    return self.func(*args)
  File "C:\Users\keith\Desktop\tkinter.py", line 26, in switch
    self.x.config(text = 'Farenheight:')
AttributeError: 'NoneType' object has no attribute 'config'

【问题讨论】:

    标签: python python-3.x tkinter


    【解决方案1】:

    问题在于您将 x 和 z 属性 (self.x, self.z) 分配给 tkinter 标签,而是分配给 Tkinter.Label.grid() 函数返回的任何内容,即 None。

    相反,将标签的声明和它们的网格配置分成两行,首先声明变量,然后在它们上调用网格函数,从而将 x 和 z 分配给标签本身。

    from tkinter import *
    bool1 = True
    class App:
        def __init__(self, master):
            frame = Frame(master)
            frame.pack()
            self.x = Label(frame, text = 'Celcius:')
            self.x.grid(row = 0, column = 0)
            self.c_var = DoubleVar()
            Entry(frame, textvariable = self.c_var).grid(row = 0, column = 1)
            self.z = Label(frame, text = 'Farenheight:')
            self.z.grid(row = 1, column = 0)
            self.result_var = DoubleVar()
            Label(frame, textvariable = self.result_var).grid(row = 1, column = 1)
            b1 = Button(frame, text = 'Switch', command = self.switch)
            b1.grid(row = 2, columnspan = 2)
            button = Button(frame, text = 'Convert', command = self.convert)
            button.grid(row = 3, columnspan = 2)
            return None
        def convert(self):
            c = self.c_var.get()
            c = c * (9/5) + 32
            self.result_var.set(c)
        def switch(self):
            global bool1
            if bool1 == True:
                bool1 = False
                self.x.config(text = 'Farenheight:')
            else:
                bool1 = True
                self.z['text'] = 'Celcius:'
    root = Tk()
    root.wm_title('Temp Converter')
    app = App(root)
    root.mainloop()
    

    【讨论】:

      猜你喜欢
      • 2016-04-19
      • 2011-11-13
      • 2019-01-06
      • 1970-01-01
      • 2020-04-13
      • 2021-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多