在 tkinter 上按下按钮后如何更新变量?

富离子

下面是我的代码示例。

我正在尝试在 python 中使用 tkinter 制作 GUI。我想要一个应用程序,它有一个变量,比方说var_list,它作为参数引入到一个函数中。我使用一个按钮运行这个函数command=lambda: analize(var_list)

我希望能够通过按下按钮(将字符串添加到列表的按钮)来修改变量。我也有一个功能:

def button_clicked(e):
    if ((e["text"]).lower()) in var_list:
        var_list.pop(var_list.index((e["text"]).lower())) #this adds a string to the list
    else:
        var_list.append((e["text"]).lower()) #this deletes the string from the list if it was already there

该功能有效,我尝试打印,var_list每次按下按钮时它都会更新。问题是我之前必须创建var_list一个空列表,当我运行函数时analize(var_list),它使用空列表而不是更新的列表。

关于如何在每次从列表中添加/删除某些内容时更新全局变量的任何想法?

from tkinter import *
from PIL import ImageTk

def show_frame(frame):
    frame.tkraise()

def button_clicked(e):
    if ((e["text"]).lower()) in var_list:
        var_list.pop(var_list.index((e["text"]).lower()))
    else:
        var_list.append((e["text"]).lower())

def analize(x):

    #does stuff with the list

window = Tk()

frame1 = Frame(window)
frame2 = Frame(window)

canvas1 = Canvas(frame1,width = 1280, height = 720)
canvas1.pack(expand=YES, fill=BOTH)
image = ImageTk.PhotoImage(file="background.png")

var_list = []

button1 = Button(canvas1, text="Analize",font=("Arial"),justify=CENTER, width=10, command=lambda: [show_frame(frame2),analize(x=var_list)])
button1.place(x=(1280/2)-42, y=400)

button2 = Button(canvas1, text="String1",font=("Arial"),justify=CENTER, width=10, command=lambda: button_clicked(button2))
button2.place(x=(1280/2)-42, y=450)

button3 = Button(canvas1, text="String2",font=("Arial"),justify=CENTER, width=10, command=lambda: button_clicked(button3))
button3.place(x=(1280/2)-42, y=500)

谢谢

达菲

您可以创建一个全局变量,例如:-global var现在您可以在其他定义中访问它以像这样操作变量

global var
var = 0 # if you want to set a default value to the variable before calling the 
function

def change_var():
    global var
    var = 1

使用全局

强烈建议使用 global 并且如果您正在使用包含或需要操作变量的函数,这是非常必要的

如果函数内部没有给出 global ,则该变量将存在于函数内部,并且无法在函数外部访问。

希望这个答案有帮助,顺便说一句,我不确定这是否是您正在寻找的答案,因为您的问题不清楚,也许给出一种您可能认为可能需要更改或更新变量的情况

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章