英文:
'NoneType' object has no attribute 'get' | Python GUI
问题
抱歉,我不能提供对代码错误的实时调试。这个错误通常是因为在尝试对一个没有返回任何值的对象执行 .get()
操作。你的代码似乎是将 Entry 组件的返回值直接赋值为变量(txt1 = Entry(root, width = 30).grid(...)
),这实际上会将 txt1
赋值为 None
,因为 grid()
方法没有返回一个可用于 .get()
操作的对象。
尝试分开创建和布局 Entry 组件,例如:
txt1 = Entry(root, width=30)
txt1.grid(row=0, column=1, pady=10, padx=10)
对于所有的 Entry 组件,都使用这种分开创建和布局的方法,而不是将其结合在一起。这样,txt1.get()
等操作将能够得到正确的 Entry 对象并返回其值。
至于Python版本,较旧的Python版本通常不会导致这种类型的错误。问题更可能是与代码逻辑和GUI组件创建相关。
英文:
So I'm writing a simple Python GUI program to generate random numbers and keep getting this error:
'NoneType' object has no attribute 'get'
def ButClick():
try:
MinNum = int (txt1.get())
MaxNum = int (txt2.get())
Num = int (txt3.get())
except ValueError:
messagebox.showerror("ValueError", "Error! Invalid numbers")
else:
Nums = ''
if MinNum <= MaxNum:
i = 0
while i < Num:
numOne = randint(MinNum,MaxNum)
Nums = Nums + ":" + str(numOne)
i += 1
scr.insert(INSERT, str(Nums) + "\n")
else:
messagebox.showerror("NumError!!", "Error! Invalid Numbers!")
pass
root = Tk()
root.title("Random is so random :)")
lb1 = Label(root, text = "Min number").grid(
row = 0,
column = 0,
pady = 10,
padx = 10)
txt1 = Entry(root, width = 30).grid(
row = 0,
column = 1,
pady = 10,
padx = 10)
lb2 = Label(root, text = "Max number").grid(
row = 1,
column = 0,
pady = 10,
padx = 10)
txt2 = Entry(root, width = 30).grid(
row = 1,
column = 1,
pady = 10,
padx = 10)
lb3 = Label(root, text = "number").grid(
row = 2,
column = 0,
pady = 10,
padx = 10)
txt3 = Entry(root, width = 30).grid(
row = 2,
column = 1,
pady = 10,
padx = 10)
but = Button(root, width = 15, height = 2, text = "Generate", command = ButClick).grid(
row = 3,
column = 0,
columnspan = 2,
pady = 10,
padx = 10)
scr = scrolledtext.ScrolledText(root, height = 10).grid(
row = 4,
column = 0,
columnspan = 2,
pady = 10,
padx = 10)
How can I fix it? Maybe its because I need to use the older version of Python?
I tried to install python 3.7.3 version via terminal but it was in vain.
I watched other questions on this topic but couldn't find any specifically on attribute .get
答案1
得分: 0
grid()
不返回任何内容,这就是为什么你的变量如txt2
和lb1
都变成None
,从而引发错误。我相信你想要做的是:
txt1 = Entry(root, width = 30)
txt1.grid(
row = 0,
column = 1,
pady = 10,
padx = 10)
当然,对于所有其他用户界面元素也是一样的。请注意代码首先创建一个元素并将其存储在一个变量中,然后单独将元素定位到网格中。
英文:
grid()
does not return anything, which is why all your variables like txt2
and lb1
end up as None
, hence the error. I believe what you want to do is:
txt1 = Entry(root, width = 30)
txt1.grid(
row = 0,
column = 1,
pady = 10,
padx = 10)
Of course same goes for all other UI elements. Notice how the code first creates an element and stores it in a variable, and only then, separately, positions the element in the grid.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论