【问题标题】:How to have a Tkinter Entry box repeat a function each time a character is inputted?每次输入字符时,如何让 Tkinter 输入框重复一个功能?
【发布时间】:2013-04-19 18:47:47
【问题描述】:

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

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 小部件在每次输入字符时重新运行该功能?

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

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

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

    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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多