gpt4 book ai didi

python - 使用 tkinter 中的按钮更改变量

转载 作者:太空宇宙 更新时间:2023-11-03 15:10:01 25 4
gpt4 key购买 nike

问题所在的代码相当大,所以我在这里起草一个手指画版本。

import tkinter

variable = "data"

def changeVariable():
variable = "different data"

def printVariable():
print(variable)

window = tkinter.Tk
button1 = tkinter.Button(window, command=changeVariable)
button1.pack()
button2 = tkinter.Button(window, command=printVariable)
button2.pack()

因此,在这个示例中,我按第一个按钮更改“变量”,然后按第二个按钮打印它。但打印的是“数据”而不是“不同数据”。我搜索了一下,决定在主代码和函数中定义变量之前使用 global,所以代码如下所示。

import tkinter

global variable
variable = "data"

def changeVariable():
global variable
variable = "different data"

def printVariable():
global variable
print(variable)

window = tkinter.Tk()
button1 = tkinter.Button(window, command=changeVariable)
button1.pack()
button2 = tkinter.Button(window, command=printVariable)
button2.pack()

window.mainloop()

但现在它说“名称‘变量’未定义”。

本质上,如何使用 tkinter 中的按钮来更改变量“variable”?我使用global的想法是错误的吗?

最佳答案

您对 global 的使用有点不对劲。您不需要到处定义全局。让我们稍微分解一下。

您不需要在全局命名空间中定义全局命名空间。

from tkinter import *
window = Tk()
myvar = "data" # this variable is already in the global namespace

这告诉函数在与变量 myvar 交互时检查全局命名空间。

def changeVariable():
global myvar
myvar = "different data"

此打印语句之所以有效,是因为它在检查其他命名空间但没有找到变量 myvar 的情况下检查全局变量命名空间。

def printVariable():
print(myvar)

button1 = Button(window, command = changeVariable)
button1.pack()
button2 = Button(window, command = printVariable)
button2.pack()

window.mainloop()

因此,如果我们将这段代码放在一起,我们将得到所需的结果。

from tkinter import *
window = Tk()
variable = "data"

def changeVariable():
global variable
variable = "different data"

def printVariable():
print(variable)

button1 = Button(window, command = changeVariable)
button1.pack()
button2 = Button(window, command = printVariable)
button2.pack()

window.mainloop()

这会产生一个如下所示的窗口:

enter image description here

如果我们先按底部按钮,然后按顶部按钮,然后再次按底部按钮,我们得到的结果是:

enter image description here

关于python - 使用 tkinter 中的按钮更改变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44293379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com