在 tkinter 条目小部件中输入的数据包含 'NoneType' 对象并且没有属性 'get'

Entered data within tkinter entry widget contains 'NoneType' object and has no attribute 'get'

我正在尝试创建一个收集实验数据的程序。我已经成功创建了一个包含标签和条目小部件的 table。但是,当尝试通过收集输入的数据使条目小部件起作用时,我的脚本失败了。

import tkinter as tk
from PIL import ImageTk, Image


class Window(tk.Frame):

def __init__(self, master=None):
   tk.Frame.__init__(self, master)               
   self.master = master
   self.init_window()
def init_window(self):
   self.master.title("Data Analyser")

   tk.Label(self.master, text="Cell Number").grid(row=1, sticky=tk.W)
   tk.Label(self.master, text="1").grid(row=2) 
   tk.Label(self.master, text="1").grid(row=2)      


   tk.Label(self.master, text="Treatment").grid(row=1, column=2)
   Treatment_1 = tk.Entry(self.master).grid(row=2,column=2)
   Treatment_2 = tk.Entry(self.master).grid(row=3,column=2)

   tk.Button(self.master, text = "Submit", command = self.getInput).grid(row = 14, column = 2)

def getInput(self):    
   global Treatment_Data
   a = Treatment_1.get()
   b = Treatment_2.get()
   Treatment_Data = [a,b]



root = tk.Tk()
root.geometry("500x450")
app = Window(root) 
root.mainloop()                                                                                                                                                               

我希望上面的代码会生成一个名为 'Treatment_Data' 的全局变量,但不幸的是,当我单击 'Submit' 小部件时收到以下错误消息:

 Traceback (most recent call last):
    File "C:\Users\xxxx\lib\tkinter\__init__.py", line 1550, in __call__
    return self.func(*args)
    File "<ipython-input-134-2b5d212a0dcf>", line 47, in getInput
       a = self.Treatment_1.get()
  AttributeError: 'NoneType' object has no attribute 'get'

任何澄清将不胜感激。

您需要使用 self 将 Treatment_1 和 Treatment_2 作为 class 变量,然后您才能在回调函数 getInput() 中访问它们。
另一个评论中提到的事情是您需要将两部分分开 -
1. 创建一个条目小部件和
2. 将它放在网格中。
您应该创建一个 Entry 小部件并将其存储在 Treatment_1 中。完成后,您应该使用 Treatment_1 变量将小部件放置在网格中的所需位置。

import tkinter as tk
from PIL import ImageTk, Image

class Window(tk.Frame):
   def __init__(self, master=None):
      tk.Frame.__init__(self, master)               
      self.master = master
      self.init_window()
   def init_window(self):
      self.master.title("Data Analyser")
      tk.Label(self.master, text="Cell Number").grid(row=1, sticky=tk.W)
      tk.Label(self.master, text="1").grid(row=2) 
      tk.Label(self.master, text="1").grid(row=2)      
      tk.Label(self.master, text="Treatment").grid(row=1, column=2)
      self.Treatment_1 = tk.Entry(self.master)
      self.Treatment_2 = tk.Entry(self.master)
      self.Treatment_1.grid(row=2,column=2)
      self.Treatment_2.grid(row=3,column=2)
      tk.Button(self.master, text = "Submit", command = self.getInput).grid(row = 14, column = 2)
   def getInput(self):    
      global Treatment_Data
      a = self.Treatment_1.get()
      b = self.Treatment_2.get()
      Treatment_Data = [a,b]
      print(Treatment_Data)

root = tk.Tk()
root.geometry("500x450")
app = Window(root) 
root.mainloop()