python – 当一个回调输入到Tkinter Entry Box的show参数时,数字
题
为什么我的随机ascii字符选择器函数输出四,这个上下文中四号的意义是什么?为什么我没有收到错误消息? 请记住,问题不在于如何解决问题,而在于输出特定数字的原因. 背景和代码 我正在尝试创建一个基本的电子邮件客户端.我认为我的密码框显示随机字符而不是显而易见的*会很酷.所以,我创建了一个选择随机ascii字母的函数. import random import string def random_char(): char_select = random.randrange(52) char_choice = string.ascii_letters[char_select] return char_choice 当我在交互式终端中运行它时,它会随机吐出一个字母.但是,当我通过我的小部件运行它 self.Password = Entry (self,show = lambda: random_char()) 我遇到了一堆四肢. 额外信用 如果您有时间,请访问我的相关问题,How to have a Tkinter Entry box repeat a function each time a character is inputted? 解决方法
show参数接受的值不是回调. Tkinter正在接收你的回调对象并尝试将其转换为字符串,这就是你在输入框中输入的内容.
相反,您可以在使用绑定键入后重新配置条目: def key(event): entry.configure(show = random_char()) entry = tk.Entry (self) entry.pack() entry.bind("<Key>",key) 编辑 Bryan Oakley是正确的,因为这会将所有字符更改为您键入的相同单个随机字符.在键入时显示不同的随机字符不是您应该使用Entry小部件的方式.您可以尝试以下方式: def key(event): global real_password global garbage current_len = len(v.get()) if event.char and event.char in string.ascii_letters: real_password += event.char garbage += random_char() garbage = garbage[:current_len] v.set(garbage) v = tk.StringVar() real_password = "" garbage = "" entry = tk.Entry (self,textvariable = v) entry.pack() entry.bind("<KeyRelease>",key) 当然有很多限制,当键被释放时,键入的最后一个字符被更改,而不是按下时,所以你必须键入快速:),无法控制光标移动键等.但无论如何它很有趣尝试. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |