如何在输入后在画布上显示一条提示
问题描述:
我想制作一个论坛程序,其中有一个文本限制。当我尝试运行我创建的代码时,它说text1在我明确定义它时没有定义。如何在输入后在画布上显示一条提示
def forum():
mk = Tk()
canvas = Canvas(mk, width=425, height=425, bg ='grey')
canvas.pack()
Labelforum1 = Label(mk, text="Forum", bg='gray', font=('Times', 30))
Labelforum1.pack()
Labelforum1.place(relx=0.5, rely=0.1, anchor=CENTER)
Labelforum2 = Label(mk, text="Name:", bg='gray')
Labelforum2.pack()
Labelforum2.place(relx=0.11, rely=0.22, anchor=CENTER)
Entryforum1 = Entry(mk, bd =5, width=20)
Entryforum1.pack()
Entryforum1.place(relx=0.40, rely=0.22, anchor=CENTER)
Labelforum3 = Label(mk, text="Prompt:", bg='gray')
Labelforum3.pack()
Labelforum3.place(relx=0.12, rely=0.33, anchor=CENTER)
text1 = Text(mk, width=50, height=6)
text1.pack()
text1.place(relx=0.49, rely=0.50, anchor=CENTER)
Buttonforforum = Button(mk, text="Post", bg ='grey', command=begin)
Buttonforforum.pack()
Buttonforforum.place(relx=0.9, rely=0.70, anchor=CENTER)
bfforum = Button(mk, text="Go to message board", command=begin)
bfforum.pack()
bfforum.place(relx=0.5, rely=0.86, anchor=CENTER)
labelc = Label(mk, text="(200 character limit)", bg = 'grey')
labelc.pack()
labelc.place(relx=0.19, rely=0.69, anchor=CENTER)
def begin():
answer = text1.get("1.0", "end-1c")
if len(answer) <= 10:
label = Label(mk, text="This prompt is being added to the forum")
label.pack()
label.place(relx=0.5, rely=0.75, anchor=CENTER)
else:
label1 = Label(mk, text="This prompt is too long")
label1.pack()
label1.place(relx=0.5, rely=0.75, anchor=CENTER)
为什么它给了我这个错误。任何帮助将不胜感激
答
正如Bryan Oakley在他的评论中所说的,text1
是一个局部变量,所以它只存在于forum
函数中。为了在begin
函数中使用它,您需要将其声明为全局变量。这同样适用于mk
。
下面是如何声明mk
和text1
为全局变量:
def forum():
global text1, mk
mk = Tk()
# ...
编辑:完整,没有错误
from tkinter import *
def forum():
global mk, text1
mk = Tk()
canvas = Canvas(mk, width=425, height=425, bg ='grey')
canvas.pack()
Labelforum1 = Label(mk, text="Forum", bg='gray', font=('Times', 30))
Labelforum1.pack()
Labelforum1.place(relx=0.5, rely=0.1, anchor=CENTER)
Labelforum2 = Label(mk, text="Name:", bg='gray')
Labelforum2.pack()
Labelforum2.place(relx=0.11, rely=0.22, anchor=CENTER)
Entryforum1 = Entry(mk, bd =5, width=20)
Entryforum1.pack()
Entryforum1.place(relx=0.40, rely=0.22, anchor=CENTER)
Labelforum3 = Label(mk, text="Prompt:", bg='gray')
Labelforum3.pack()
Labelforum3.place(relx=0.12, rely=0.33, anchor=CENTER)
text1 = Text(mk, width=50, height=6)
text1.pack()
text1.place(relx=0.49, rely=0.50, anchor=CENTER)
Buttonforforum = Button(mk, text="Post", bg ='grey', command=begin)
Buttonforforum.pack()
Buttonforforum.place(relx=0.9, rely=0.70, anchor=CENTER)
bfforum = Button(mk, text="Go to message board", command=begin)
bfforum.pack()
bfforum.place(relx=0.5, rely=0.86, anchor=CENTER)
labelc = Label(mk, text="(200 character limit)", bg = 'grey')
labelc.pack()
labelc.place(relx=0.19, rely=0.69, anchor=CENTER)
def begin():
answer = text1.get("1.0", "end-1c")
if len(answer) <= 10:
label = Label(mk, text="This prompt is being added to the forum")
label.pack()
label.place(relx=0.5, rely=0.75, anchor=CENTER)
else:
label1 = Label(mk, text="This prompt is too long")
label1.pack()
label1.place(relx=0.5, rely=0.75, anchor=CENTER)
if __name__ == "__main__":
forum()
mk.mainloop()
运行在您的代码代码'text1'是一个局部变量,这意味着它只在'forum'里面可见。 –
我应该怎么做才能使它在论坛中仍然显示,但不是局部变量 – Kg123
使其成为全局变量。 –