gpt4 book ai didi

Python 3 如何暂时禁用跟踪变量

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

我在 Windows 上使用 Python 3.4.1,如果这有帮助的话。

问题 1:如何暂时禁用跟踪变量我有一个带有 at trace 的变量字段,我想暂时禁用跟踪,这样我就可以在不触发对跟踪函数的调用的情况下更改字段的值。

有道理吗?

可能是我做错了(我加入了一段代码):

我有一个下拉列表,其中显示了可供选择的项目列表。我有第二个下拉列表,对于第一个下拉菜单中的每个项目,显示一个“子项目”列表,当我更改第一个下拉菜单时,这些子项目当然必须更新。

Q2:问题是,当第一个下拉菜单发生变化时,如何“重新打包”第二个下拉菜单?

代码如下:

import tkinter as tk

WORKINGWINDOWWIDTH = 800 # Width for the working window
WORKINGWINDOWHEIGHT = 800 # Height for the working window

root = tk.Tk()

w = tk.Canvas(root, width=WORKINGWINDOWWIDTH - 10, height=WORKINGWINDOWHEIGHT - 10, bg="darkred")

def display_parameters(*args):
print("args: {0}, and I have the following option: {1}".format(args, functionChoiceVar.get()))
if functionChoiceVar.get() == "Option 1":
print("I picked the first one...")
print("How do I repack the presets?")
elif functionChoiceVar.get() == "Option 2":
print("I picked the second one...")
return

def display_options(*args):
print("args: {0}, and I have the following suboption: {1}".format(args, presetChoiceVar.get()))
return

functionChoiceVar = tk.StringVar(root)
functionChoices = ['Option 1', 'Option 2']
functionOption = tk.OptionMenu(root, functionChoiceVar, *functionChoices)
functionOption.pack(side='left', padx=10, pady=10)
functionOption.place(x= 10, y=10)
functionChoiceVar.set('Option 1')
functionChoiceVar.trace("w", display_parameters)

presetChoiceVar = tk.StringVar(root)
presetChoices11 = ['Suboption 11', 'Suboption 12', 'Suboption 13', 'Suboption 14','Suboption 15']
presetChoices12 = ['Suboption 21', 'Suboption 22', 'Suboption 23', 'Suboption 24','Suboption 25']
presetOption = tk.OptionMenu(root, presetChoiceVar, *presetChoices11)
presetOption.pack(side='left', padx=10, pady=10)
presetOption.place(x= 100, y=10)
presetChoiceVar.set('Suboption 11')
presetChoiceVar.trace("w", display_options)

最佳答案

当您设置跟踪时,tkinter 将返回一个 id,您可以使用它稍后通过 .trace_vdelete() 方法删除跟踪。要重新开始跟踪,只需执行您第一次执行的操作即可。

跟踪跟踪 ID 的一种简单方法是将其存储为 StringVar 实例的属性。

例如:

functionChoiceVar.trace_id = functionChoiceVar.trace("w", display_parameters)
...
functionChoiceVar.trace_vdelete("w", functionChoiceVar.trace_id)

(顺便说一句,与所问的问题无关,调用 .pack() 然后立即调用 .place() 没有任何意义。您可以删除对 .pack() 的调用,因为它被对 .place() 的调用否定了)

关于Python 3 如何暂时禁用跟踪变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26237987/

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