首页 > 解决方案 > 为什么我的代码不会为输入到 tkinter 文本框中的数据返回一个值

问题描述

我已经编写了这段代码,由于某种原因,它在函数 post(self) 中使用时拒绝为 slef.REV 返回任何类型的值或输入,但是当我尝试在 getlen() 中返回一个值时它会返回一个值用于重新计算评论中字符数的函数。对于我从此类中检索数据的任何其他变量,我没有这个问题。以下是相关代码,任何帮助将不胜感激。发生此问题的行是第一个函数称为 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"))

标签: pythontkinter

解决方案


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

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

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

推荐阅读