Tkinter中for循环误输出4个"N",无法正确判断Entry是否为空
问题原因分析
你的代码里仅第一个Entry组件(self.E1)绑定了对应的StringVar(self.a),剩余的E2到E5都没有绑定self.b、self.Umfang、self.Fleache、self.Diagonale这些变量。这会导致未绑定的StringVar始终为空字符串,无论你在Entry中输入什么内容,self.get2列表里除第一个元素外,其他都是空值,最终循环输出全为"N"。
修正后的代码
import tkinter as tk # 补充导入语句,原代码遗漏 class Menu(): def creat_order(self): root = tk.Tk() root.title("Bestellung aufgeben") root.geometry("450x350") root.resizable(width=False, height=False) Button = tk.Button(root, text="Viereck", command=lambda: [root.destroy(), self.Viereck_Menu()]) Button.config(width=100, height=10, background="red") Button.pack() root.mainloop() def Viereck_Menu(self): self.root = tk.Tk() self.root.geometry("700x400") self.a=tk.StringVar() self.b=tk.StringVar() self.Umfang=tk.StringVar() self.Fleache=tk.StringVar() self.Diagonale=tk.StringVar() Button = tk.Button(self.root, text="Back", command=lambda: [self.root.destroy(), self.creat_order()]) Button.pack() # 补充pack调用,否则按钮不显示 # 为每个Entry绑定对应的StringVar self.E1 = tk.Entry(self.root, font=40, fg="blue", textvariable=self.a) self.E1.place(x=170, y=40) self.E2 = tk.Entry(self.root, font=40, fg="blue", textvariable=self.b) self.E2.place(x=170, y=70) self.E3 = tk.Entry(self.root, font=40, fg="blue", textvariable=self.Umfang) self.E3.place(x=170, y=100) self.E4 = tk.Entry(self.root, font=40, fg="blue", textvariable=self.Fleache) self.E4.place(x=170, y=130) self.E5 = tk.Entry(self.root, font=40, fg="blue", textvariable=self.Diagonale) self.E5.place(x=170, y=160) self.LabelforPicture = tk.Label(self.root) self.LabelforPicture.place(x=400, y=65) self.Button = tk.Button(self.root, text="Berechnen", command=self.New_list) self.Button.pack() def New_list(self): self.get2 = [self.a.get(), self.b.get(), self.Umfang.get(), self.Fleache.get(), self.Diagonale.get()] self.new = [] # 简化循环逻辑,直接遍历元素而非索引 for content in self.get2: self.new.append("N" if content.strip() == "" else "L") print(self.new)
额外优化说明
- 补充了
tkinter的导入语句,原代码遗漏此关键部分。 - 给
Back按钮添加pack()调用,确保按钮在界面上显示。 - 简化
New_list的循环逻辑,直接遍历列表元素,比通过索引遍历更简洁易读。 - 给计算按钮指定父组件
self.root,避免组件归属混乱。 - 判断空值时使用
content.strip(),可过滤输入的空白字符,逻辑更严谨。
内容的提问来源于stack exchange,提问作者ayan kulber
相关产品推荐
相关产品推荐

