作者MaJaeYun (Bonjwa)
看板Python
标题[问题] tkinter.entryconfig无法使用回圈输入
时间Wed Dec 8 13:08:07 2021
想要做的功能是在tkinter上面, 使用menu选单做切换
呼叫update_output後, 把一个StringVar字串更改内容
问题发生在写entryconfigure时, 回圈工作跟预期的不一样
输出给更新字串的func时,只会出现最後一个
temp_var = tk.StringVar()
test_list = [
'Test1',
'Test2',
'Test3']
for i
in range(
0,
len(test_list)):
#显示选单正常显示没问题
tkmenu.add_command(label = test_list[i])
#绑定功能时永远都是输出最後一个'Test3'
tkmenu.entryconfigure(i,
command =
lambda: update_output(test_list[i]))
def update_output(
self,
str_var):
print(
"input var:" + str_var)
temp_var.set(str_var)
print(
"output var:" + temp_var.get())
return template_var
比对input var跟output var之後
确定输入的时候就是'Test 3', 不管按哪一个选项都一样
但不知道为什麽,如果如下列所示不用回圈,直接手动输入,完全可以正常运作
点到对的目录选项,就会吐回来对应的字串
tkmenu.entryconfigure(
0,
command =
lambda: update_output(
'Test1'))
tkmenu.entryconfigure(
1,
command =
lambda: update_output(
'Test2'))
tkmenu.entryconfigure(
2,
command =
lambda: update_output(
'Test3'))
只能猜测是entryconfigure不能包在回圈里?
因为看起来不像是制作选项时的时间问题,用一个一个输入的方式是完全正常的
是我写错, 或是有甚麽方法可以处理多笔目录选项的状况呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 223.136.251.47 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1638940089.A.227.html
※ 编辑: MaJaeYun (223.136.251.47 台湾), 12/08/2021 13:19:16
1F:推 lycantrope: update_output是classmethod吗?template_var没定义 12/08 14:46
3F:推 s0914714: command = lambda i=i: update_output(test_list[i]) 12/08 15:04
4F:推 lycantrope: 原来是lambda scope问题i要从lambda 左侧传入 12/08 15:18
6F:→ lycantrope: 但理论上应该可以从global传入吗(?) 不太懂 12/08 15:24
7F:推 lycantrope: lambda陷阱 12/08 15:28
9F:推 lycantrope: lambda没在冒号左侧定义会在`呼叫`时从global传入 12/08 15:42
10F:推 s0914714: 可以从global传入没问题 看执行时global变数变成啥而以 12/08 15:43
11F:推 lycantrope: 嗯 例如 del i 就会导致i没定义 呼叫就会失败 12/08 15:48
12F:→ MaJaeYun: 解决了 非常感谢两位大大的协助~ 12/09 16:55