Tkinter递减数值按钮问题:仅能首次生效,无法多次执行递减
解决Tkinter递减按钮只能生效一次的问题
嘿,我来帮你排查这个问题!你的按钮只能把数值从10改成9,之后就没法继续递减,核心原因是没有更新全局的integer变量。
看你的subtract函数:
def subtract(): new_integer = integer - 1 l1.config(text=new_integer)
这里的integer是全局变量,但你只是创建了一个局部的new_integer,并没有修改全局的integer值。所以每次点击按钮,都是用初始的10去减1,结果永远是9,自然没法继续往下减啦。
下面给你两种可行的解决办法:
方法1:用global关键字声明全局变量
直接在函数里告诉Python,你要修改的是全局作用域里的integer变量:
from tkinter import * w = Tk() w.geometry('500x500') integer = 10 def subtract(): global integer # 声明要操作全局变量 integer -= 1 # 直接更新全局变量的值 l1.config(text=integer) l1 = Label(w, text=integer, bg='white', fg='black') l1.config(height=2, width=7) l1.grid(row=1, column=1) b1 = Button(w, text='<<< 1', bg='black', fg='white', command=subtract) b1.config(height=2, width=7) b1.grid(row=1, column=0) w.mainloop()
方法2:用可变对象存储数值(避免全局声明)
如果你不想用global关键字,可以把数值放在一个可变对象里(比如列表),因为修改可变对象的元素不需要声明全局:
from tkinter import * w = Tk() w.geometry('500x500') integer = [10] # 用列表存储数值,列表是可变对象 def subtract(): integer[0] -= 1 # 修改列表里的元素 l1.config(text=integer[0]) l1 = Label(w, text=integer[0], bg='white', fg='black') l1.config(height=2, width=7) l1.grid(row=1, column=1) b1 = Button(w, text='<<< 1', bg='black', fg='white', command=subtract) b1.config(height=2, width=7) b1.grid(row=1, column=0) w.mainloop()
两种方法都能让按钮每次点击都正确递减数值,你可以根据自己的习惯选择~
内容的提问来源于stack exchange,提问作者Osuynonma
相关产品推荐
相关产品推荐

