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
问题原因
出现两次输出的核心是重复执行了打印操作:
- 调用
Application.connaitre(self)时,该方法内部直接执行print(self.nom1.get()),输出输入框中的内容(比如10000)。 - 由于
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
相关产品推荐
相关产品推荐

