2017-03-18 77 views
0

我想制作一个论坛程序,其中有一个文本限制。当我尝试运行我创建的代码时,它说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) 

为什么它给了我这个错误。任何帮助将不胜感激

+1

运行在您的代码代码'text1'是一个局部变量,这意味着它只在'forum'里面可见。 –

+0

我应该怎么做才能使它在论坛中仍然显示,但不是局部变量 – Kg123

+0

使其成为全局变量。 –

回答

0

正如Bryan Oakley在他的评论中所说的,text1是一个局部变量,所以它只存在于forum函数中。为了在begin函数中使用它,您需要将其声明为全局变量。这同样适用于mk

下面是如何声明mktext1为全局变量:

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() 
+0

非常感谢您的帮助。 – Kg123

+0

但是,当我尝试运行代码它说text1没有定义,所以我尝试在定义(开始)中使文本1。当我尝试这样做时,它只是使文本框在不同的tk屏幕上,而不是在论坛上。你知道如何保持论坛屏幕上的文本框 – Kg123

+0

我已经添加了我用来测试你的问题的完整代码。当我运行它时,没有错误。 –