You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)
额外优化说明
  1. 补充了tkinter的导入语句,原代码遗漏此关键部分。
  2. 给Back按钮添加pack()调用,确保按钮在界面上显示。
  3. 简化New_list的循环逻辑,直接遍历列表元素,比通过索引遍历更简洁易读。
  4. 给计算按钮指定父组件self.root,避免组件归属混乱。
  5. 判断空值时使用content.strip(),可过滤输入的空白字符,逻辑更严谨。

内容的提问来源于stack exchange,提问作者ayan kulber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 16:27:20