Skip to main content
 首页 » 编程设计

python之每次输入字符时,如何让 Tkinter 输入框重复一个功能

2025年05月04日7kevingrace

我正在尝试创建一个基本的电子邮件客户端来获得乐趣。我认为如果密码框显示随机字符会很有趣。我已经有了创建随机字符的功能:

import string 
import random 
 
 
 
def random_char(): 
 
    ascii = string.ascii_letters 
    total = len(string.ascii_letters) 
    char_select = random.randrange(total) 
 
    char_choice = char_set[char_select] 
 
    return char_choice 

但问题是这只运行一次,然后程序无限期地重复该字符。

    self.Password = Entry (self, show = lambda: random_char()) 
    self.Password.grid(row = 1, column = 1) 

如何让输入小部件在每次输入字符时重新运行函数?

请您参考如下方法:

不幸的是,Entry 小部件的 show 属性不是这样工作的:正如您所注意到的,它只是指定要显示的单个字符而不是什么已输入字符。

要获得您想要的效果,您需要拦截 Entry 小部件上的按键操作,然后进行翻译。但是,您必须小心,只改变您真正想要的键,而保留其他键(特别是 Return、Delete、箭头键等)。我们可以通过将回调绑定(bind)到输入框上的所有按键事件来做到这一点:

self.Password.bind("<Key>", callback) 

其中 callback() 被定义为调用您的随机函数,如果它是一个 ascii 字母(这意味着数字未经修改地通过),插入随机字符,然后返回特殊的 break 字符串常量,指示不会再处理此事件):

def callback(event): 
    if event.char in string.ascii_letters: 
        event.widget.insert(END, random_char()) 
        return "break"