我在Windows上使用Python 3.4.1,如果这应该有帮助.
Q1:我如何暂时禁用跟踪变量 我有一个跟踪的变量字段,我想暂时禁用跟踪,以便我可以更改字段的值而不触发对跟踪功能的调用.
是否有意义?
可能是我做错了(我加入了一段代码):
我有一个下拉列表,显示了我可以选择的项目列表.我有第二个下拉列表,为第一个下拉菜单中的每个项目显示"子项目"列表,当我更改第一个下拉菜单时,当然必须更新这些项目.
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)
Run Code Online (Sandbox Code Playgroud)
设置跟踪时,tkinter将返回一个id,您可以使用该ID随后使用该.trace_vdelete()方法删除跟踪.要重新启动跟踪,只需执行您第一次执行的操作即可.
跟踪跟踪ID的一种简单方法是将其作为属性存储到a的实例中StringVar.
例如:
functionChoiceVar.trace_id = functionChoiceVar.trace("w", display_parameters)
...
functionChoiceVar.trace_vdelete("w", functionChoiceVar.trace_id)
Run Code Online (Sandbox Code Playgroud)
(顺便说一句,与被问到的问题无关,呼叫.pack()然后立即呼叫.place()没有任何意义.你可以删除呼叫,.pack()因为它被呼叫否定了.place())
| 归档时间: |
|
| 查看次数: |
1594 次 |
| 最近记录: |