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

Python Tkinter银行管理项目:点击按钮重复输出问题排查

Tkinter按钮点击后控制台重复输出问题排查

我是Python初学者,正在开发基于Tkinter的银行管理项目。点击按钮时,控制台出现两个输出(示例输出为10000和None),而非预期的一个,请求排查错误原因。

代码示例

from tkinter import *
import tkinter as tk


class Application(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.nom1 = StringVar()
        self.v = ""
        self.creer_widgets()
        self.compte = 0


    def creer_widgets(self):
        self.label = tk.Label(self, text = "Compte Banquaire")
        self.entry = tk.Entry(self, textvariable = self.nom1)
        self.bouton=tk.Button(self, text = "Entrer", command = lambda: Gestion.gest_nom(self))

        self.v = self.nom1.get()
        self.label.pack()
        self.entry.pack()
        self.bouton.pack()

    def connaitre(self):
        print(self.nom1.get())

class Gestion(object):
    
    def __init__(self):
        pass

    def gest_nom(self):
        a = Application.connaitre(self)
        print(a)
     

if __name__=="__main__":
    app = Application()
    app.mainloop()

实际输出

10000
None

问题原因

出现两次输出的核心是重复执行了打印操作:

  1. 调用Application.connaitre(self)时,该方法内部直接执行print(self.nom1.get()),输出输入框中的内容(比如10000)。
  2. 由于connaitre方法没有定义return语句,Python函数默认返回None,所以变量a的值是None,后续print(a)又输出了一次None。

解决办法

有两种简单的修复方式:

方式一:让connaitre返回值而非直接打印

修改Application类中的connaitre方法,把打印逻辑移到gest_nom中:

def connaitre(self):
    return self.nom1.get()

这样gest_nom里的a会拿到输入框的值,执行print(a)只会输出一次内容,不会出现None。

方式二:移除gest_nom中的重复打印

如果不想修改connaitre方法,直接在gest_nom中调用它即可,不要额外打印返回值:

def gest_nom(self):
    Application.connaitre(self)

这样只会触发connaitre内部的打印,输出一次结果。

额外建议

你的Gestion类设计比较冗余,gest_nom作为实例方法却被当成类方法调用,其实可以把相关逻辑直接整合到Application类中,让代码更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:13:01