python - 帮助处理 python Entry 小部件中的 <key> 事件

标签 python events widget tkinter

我正在用 Python 编写一些代码,但在尝试检索 Entry 小部件的内容时遇到了问题。 问题是:我想限制可以输入的字符,所以我试图在达到特定字符数(在本例中为 2 个)时清除 Entry 小部件,但看起来我总是错过最后输入的字符特点。我在打印中添加了丢失的字符以显示。

示例代码如下:

from Tkinter import *
class sampleFrame:
    def __init__(self, master):
        self.__frame = Frame(master)
        self.__frame.pack()
    def get_frame(self):
        return self.__frame


class sampleClass:
    def __init__(self, master):
        self.__aLabel = Label(master,text="aLabel", width=10)
        self.__aLabel.pack(side=LEFT)
        self.__aEntry = Entry (master, width=2)
        self.__aEntry.bind('<Key>', lambda event: self.callback(event, self.__aEntry))
        self.__aEntry.pack(side=LEFT)

    def callback(self, event, widgetName):
        self.__value = widgetName.get()+event.char
        print self.__value
        if len(self.__value)>2:
            widgetName.delete(2,4)





root = Tk()
aSampleFrame = sampleFrame(root)
aSampleClass = sampleClass(aSampleFrame.get_frame())
root.mainloop()

任何帮助将不胜感激!

提前致谢

最佳答案

首先,在您删除之后,事件继续正常处理,即插入角色。您需要向 Tkinter 发出信号,表明该事件应该被忽略。

所以在上面的代码中,添加标记行:

if len(self.__value) > 2:
    widgetName.delete(2,4)
    return "break" # add this line

另一方面,为什么要通过 lambda?事件具有您可以使用的 .widget 属性。因此,您可以将代码更改为:

    self.__aEntry.bind('<Key>', self.callback) # ※ here!
    self.__aEntry.pack(side=LEFT)

def callback(self, event):
    self.__value = event.widget.get()+event.char # ※ here!
    print self.__value
    if len(self.__value)>2:
        event.widget.delete(2,4) # ※ here!
        return "break"

所有更改的行都标有“这里!”

关于python - 帮助处理 python Entry 小部件中的 <key> 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/206916/

相关文章:

Python 诅咒 : Make enter key terminate Textbox?

python - python/scipy/numpy 中的高效增量稀疏矩阵

python - <类名>之间的区别。 python 类中的 <var name> 和 self.<var name>

python - 如何在 Python 中使用 textcat?

c# - .NET 的事件机制

events - 用于连续查询的 Cassandra(+ Spark?)的最佳方法?

events - Sencha 2 : Listeners on a panel not working

qt - 使用哪个 Qt 小部件来实现图像缩略图浏览器(显示图 block )?

javascript - 复制到剪贴板仪表板按钮

jquery - 使用 Backbone.js 的数据表/网格小部件