Python 为什么我的代码不返回输入到tkinter文本框中的数据值

Python 为什么我的代码不返回输入到tkinter文本框中的数据值,python,tkinter,Python,Tkinter,我已经编写了这段代码,出于某种原因,它在函数post(self)中使用时拒绝为slef.REV返回任何类型的值或输入,但是当我尝试在getlen()中返回值时,它将返回一个值函数,用于重新计算审阅中的字符数。对于从此类中检索数据的任何其他变量,我都没有这个问题。以下是相关代码,如有任何帮助,将不胜感激。出现此问题的行是第一个函数calld post(第1-5行)和从底部向上的4行 def post(self): MovieID = self.MovID REV =

我已经编写了这段代码,出于某种原因,它在函数post(self)中使用时拒绝为slef.REV返回任何类型的值或输入,但是当我尝试在getlen()中返回值时,它将返回一个值函数,用于重新计算审阅中的字符数。对于从此类中检索数据的任何其他变量,我都没有这个问题。以下是相关代码,如有任何帮助,将不胜感激。出现此问题的行是第一个函数calld post(第1-5行)和从底部向上的4行

def post(self):
        MovieID = self.MovID
        REV = self.REV
        AddReview(conn,cursor,Add_Review,MovieID,REV)
        print(REV) 


def shrek_film(self):


    self.title = "Shrek" 
    self.MovID = 1
    self.root4 = tk.Toplevel()
    self.root4.title("Watch Shreck")
    self.root4.geometry("1400x800")
    frame_4 = tk.Frame(self.root4, bg = "black")
    frame_4.pack(fill = tk.BOTH, expand = True, padx=0 , pady=0)
    frame_4.grid_columnconfigure(1,weight=1)

    self.Create_canvas = tk.Canvas(frame_4, width=2000, height=1080)
    self.Create_canvas.place(x=-50, y=-50)
    self.Create_img = PhotoImage(file="shrek-landscape.gif")
    self.Create_canvas.create_image(20, 20, anchor = NW, image=self.Create_img)

    play_button= tk.Button(frame_4,bg="orange",text="play", command = self.addHistory)
    play_button.place(x=700,y=400)
    play_button.config(font=("Ariel","30"))


    def gtelen():
        Review = reviewbox.get('1.0',END)
        REVLEN = len(Review)
        REVLENLEFT = (231-len(Review))
        if REVLEN >=230:
            lenbox = tk.Label(frame_4 ,text="No words left",bg="orange")
            lenbox.place(x=360,y=460)
            lenbox.config(font=("Ariel","15"))
        else:
            lenbox = tk.Label(frame_4 ,text=REVLENLEFT,bg="orange")
            lenbox.place(x=360,y=460)
            lenbox.config(font=("Ariel","15"))
            print(Review)



    Words_button = tk.Button(frame_4, bg="orange",text="check number of words remaining", command=gtelen)
    Words_button.place(x=150,y=460)
    Words_button.config(font=("Ariel","10"))

    reviewlable=tk.Label(frame_4,text="Write a review",bg="orange")
    reviewlable.place(x=10,y=460)
    reviewlable.config(font=("ariel","15"))

    Review_button= tk.Button(frame_4,bg="orange",text="See Reviews")#, command = self.ViewReviews)
    Review_button.place(x=490,y=450)
    Review_button.config(font=("Ariel","15"))

    reviewbox= Text(frame_4,width=100,height=12)
    reviewbox.place(x=10,y=500)
    self.REV = reviewbox.get('1.0',END)

    post_button = tk.Button(frame_4,bg="orange",text="Post Review", command = self.post)
    post_button.place(x=830,y=650)
    post_button.config(font=("Ariel","15"))

您可以改用Entry并使用StringVar

v = StringVar()                                                         # Create StringVar
reviewbox = Entry(frame_4, width = 100, height = 12, textvariable = v)  # Create Entry widget
reviewbox.place(x = 10, y = 500)                                        # Place Entry widget
self.REV = v.get()                                                      # Get contents of StringVar

创建文本小部件大约一毫秒后,将调用行
self.REV=reviewbox.get('1.0',END)
。用户甚至还没有看到小部件,更不用说有时间输入了

在用户有机会输入数据之前,例如在
post
方法中,您不能调用
get()
方法

def post(self):
    MovieID = self.MovID
    REV = reviewbox.get("1.0", "end")
    AddReview(conn,cursor,Add_Review,MovieID,REV)
    print(REV) 

您共享的代码似乎有一些格式问题。请更正代码,以便大家更容易帮助您并理解问题。另外,请参考您遇到问题的代码行。这将与OP的代码具有完全相同的行为。