Python tkinter 类型错误:'NoneType' 对象没有长度
我写了一个程序,你可以在一个滑动条上选择你想要的单词数量。当我把滑动条调到1,然后试着把这个值打印到标签上时,我遇到了一个错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python33\lib\tkinter\__init__.py", line 1475, in __call__
return self.func(*args)
File "C:\Users\Eduard\Desktop\Zeugs\python\test.py", line 69, in ok3
label['text']=random.choice(WORDS)
File "C:\Python33\lib\random.py", line 249, in choice
i = self._randbelow(len(seq))
TypeError: object of type 'NoneType' has no len()
这是我的代码:
import tkinter as tk
from tkinter import *
import random
from functools import partial
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container= tk.Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames={}
for F in (mode2, scale1):
frame= F(container, self)
self.frames[F]=frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(mode2)
def show_frame(self, c):
frame=self.frames[c]
frame.tkraise()
class mode2(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
def antmenge(self):
label1["text"]="Mögliche Antworten: " \
+ str(antmengen.get()) + " "
label1=tk.Label(self, text="Mögliche Antworten: 0 Wörter", width=25)
label1.pack()
antmengen=IntVar()
antmengen.set(0)
antm=Scale(self, width=20, length=200, orient="vertical", from_=0, to=20,
resolution=1, tickinterval=10, label="Wörter", command=antmenge(self),
variable=antmengen)
antm.pack()
def abfrage():
if antmengen.get()==1:
button3=Button(self, text="push again", command=lambda: controller.show_frame(scale1))
button3.pack()
button2=tk.Button(self, text="push", command=abfrage)
button2.pack()
class scale1(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label1=Label(self, text="Wort1")
label1.pack()
wort1auf=Entry(self)
wort1auf.pack()
label=tk.Label(self, text=" ")
label.pack()
a=label.configure(text=(wort1auf.get()))
def ok3(label):
WORDS=(a)
label['text']=random.choice(WORDS)
button1=tk.Button(self, text="push", command=partial(ok3, label))
button1.pack()
if __name__== "__main__":
app=SampleApp()
app.mainloop()
抱歉,如果我的英语不好。
1 个回答
0
好的
那么我们开始吧。
a=label.configure(text=(wort1auf.get()))
def ok3(label):
WORDS=(a)
label['text']=random.choice(WORDS)
你遇到错误的原因是,变量a和WORDS都是None,因为label.configure(...)返回的是None。
我猜WORD是你想要选择的单词列表。我不太确定你提到的“a”是什么意思,你是想用输入的单词来填充它吗?如果是这样,WORDS=(a)是可以的,但你需要把“a”放到“ok3”里面。
def ok3(label):
a=label.configure(text=(wort1auf.get()))
WORDS=(a)
label['text']=random.choice(WORDS)
其次,它应该获取输入的值。
def ok3(label):
WORDS=(wort1auf.get()) # this will choose a random letter out of your input.
#WORDS=(wort1auf.get(),) # this will choose a the input word, since it is the only word inside the tuple.
WORDS=(a)
label['text']=random.choice(WORDS)
希望这能帮到你。
祝好,
丹尼尔