python - 为什么我的代码不会为输入到 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"))
解决方案
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)
推荐阅读
- mysql - SSMS - 链接服务器 - Azure
- flutter - 底部工作表的颤动英雄动画
- python - 我们是否必须显式使用 RDD 和诸如 foreach、parallelize 之类的操作才能在 pyspark 中执行并行处理?
- python - ImportError:无法从“nltk.util”导入名称“pairwise”
- python - “Python 对象搜索”我想加快对象的搜索速度
- python - 如何在 python 中使用正则表达式从 json 字段中提取时间?
- javascript - 无法将关闭事件添加到模态
- python - 2列之间的营业时间
- istio - 带有许多服务条目的 coreDNS 过载
- python - 我如何可视化这个 CNN Keras 模式?