是否可以从执行行中删除/停用变量?

2024-06-21 20:38:14 发布

您现在位置:Python中文网/ 问答频道 /正文

一旦代码行被执行,是否可以从中删除/停用变量?如果没有,我还有什么选择?我在这里写了一段代码来说明我的意思:

from Tkinter import *

root = Tk()
ent_var1 = StringVar()
ent_var2 = StringVar()
ent_var3 = StringVar()
cbtn_var1 = BooleanVar()
cbtn_var2 = BooleanVar()
cbtn_var3 = BooleanVar()

ent1 = Entry(textvariable=ent_var1).pack()
ent2 = Entry(textvariable=ent_var2).pack()
ent3 = Entry(textvariable=ent_var3).pack()
cbtn1 = Checkbutton(text=1, variable=cbtn_var1).pack(side = LEFT)
cbtn2 = Checkbutton(text=2, variable=cbtn_var2).pack(side = LEFT)
cbtn3 = Checkbutton(text=3, variable=cbtn_var3).pack(side = LEFT)

# prints what was written in entires
def set_variables():
    lbl1 = ent_var1.get()
    lbl2 = ent_var2.get()
    lbl3 = ent_var3.get()
    print lbl1, lbl2, lbl3
    return

# calls set_variables
btn1 = Button(root, text="Done!", command=set_variables).pack()

root.mainloop()

填写条目并按“完成”,写的是打印出来的。但是,如何使其在按下复选框时,链接到它的条目不会在下次按下“完成”时打印出来呢?文本为“1”的复选框应与第一个条目链接,以此类推。你知道吗

我想到了这个:

def should_print():
    global lbl_print
    if cbtn1:
        lbl_print += lbl1
    if cbtn2:
        lbl_print += lbl2
    if cbtn3:
        lbl_print += lbl3

但它只会在此时打印变量的值,而不是变量本身(这意味着每次变量更改时我都必须运行此代码)。你知道吗

谢谢你!你知道吗


Tags: 代码textrootpackprintentryvar1var2
2条回答

如果每个按钮都按下了,为什么不直接签入set_variables函数呢?例如:

def set_variables():
    if not cbtn_var1.get():
        print ent_var1.get(),
    if not cbtn_var2.get():
        print ent_var2.get(),
    if not cbtn_var3.get():
        print ent_var3.get(),
    print

每个print语句末尾的逗号将导致它不打印换行符,换行符由末尾的print处理。此外,这将使得如果复选框被选中,他们输入的值将不会打印。如果只希望在选中该框时打印,请删除not

如果你稍微重构一下你的代码,你可以用一行代码做同样的事情。首先,添加以下行:

cbtn_var1 = BooleanVar()
cbtn_var2 = BooleanVar()
cbtn_var3 = BooleanVar()
buttonsAndValues = [(cbtn_var1,ent_var1), (cbtn_var2,ent_var2), (cbtn_var3,ent_var3)]

对于列表中的变量,您可以在一些Python魔术中使用列表理解:

def set_variables():
    print ' '.join(value.get() for checked, value in buttonsAndValues if checked.get())

如果你以前没有看过列表理解法,我建议你仔细阅读一下——它们非常方便。你知道吗

你的问题很难理解。我认为您想要的是set_variables只打印与选中复选框关联的变量。如果是这样的话,下面是你想要的吗?你知道吗

def set_variables():
    to_print = []
    if cbtn_var1.get():
        to_print.append(ent_var1.get())
    if cbtn_var2.get():
        to_print.append(ent_var2.get())
    if cbtn_var3.get():
        to_print.append(ent_var3.get())
    print " ".join(to_print)
    return

有其他方法可以完成同样的事情,但我猜您的主要目标是根据选中的复选按钮来决定打印什么。这样做,尽管是以一种相当笨拙的方式。你知道吗

相关问题 更多 >