加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 当一个回调输入到Tkinter Entry Box的show参数时,数字

发布时间:2020-12-20 13:34:06 所属栏目:Python 来源:网络整理
导读:题 为什么我的随机ascii字符选择器函数输出四,这个上下文中四号的意义是什么?为什么我没有收到错误消息? 请记住,问题不在于如何解决问题,而在于输出特定数字的原因. 背景和代码 我正在尝试创建一个基本的电子邮件客户端.我认为我的密码框显示随机字符而不

为什么我的随机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)

当然有很多限制,当键被释放时,键入的最后一个字符被更改,而不是按下时,所以你必须键入快速:),无法控制光标移动键等.但无论如何它很有趣尝试.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读