【问题标题】:<Return> Key binding doesn't work at all [duplicate]<Return>键绑定根本不起作用[重复]
【发布时间】:2014-05-29 10:16:37
【问题描述】:

我正在用 tkinter 和 python 编写一个简单的 gui。代码如下:

from tkinter import *

class migrate_tk(Tk):
    def __init__(self, parent):
        Tk.__init__(self, parent)
        self.geometry("400x400")
        self.parent = parent        
        self.initialize()

    def initialize(self):           
        self.grid()                 

        self.entry = Entry(self)                            
        self.entry.grid(column=0, row=0, sticky='EW')       
        #~ self.entry.focus_set()
        self.entry.bind("<Return>", self.OnPressEnter)        
        #~ self.bind('<Return>', self.OnPressEnter)

        label = Label(self, anchor="w", fg="white", bg="blue")
        label.grid(column=0, row=1, columnspan=2, sticky="EW")

        self.grid_columnconfigure(0, weight=1)          

        self.resizable(True, False)                     

    def OnPressEnter(self,event):
        print ("You pressed enter")
        if self.label["bg"] == "blue":
            self.label["bg"] = "yellow"
        else: self.label["bg"] = "blue"


if __name__ == "__main__":
    app = migrate_tk(None)
    app.title('app') 
    app.mainloop()

问题是按下回车键,它不打印任何东西(显然我在终端中运行它) 谢谢!

【问题讨论】:

  • 如果您可以将示例简化为解释问题所需的代码,那将有所帮助。
  • 当我运行你的代码时,我得到一个堆栈跟踪,但我得到“你按下了输入”)并且标签变为黄色。所以看起来绑定工作正常。但是,您忘记分配 self.label,这就是您获得堆栈跟踪的原因。

标签: python python-3.x tkinter key-bindings


【解决方案1】:

您可能遇到的问题是:

AttributeError: 'tkapp' object has no attribute 'label'

& 原因是: 你必须在声明label时这样做:

self.label = Label(self, anchor="w", fg="white", bg="blue")
self.label.grid(column=0, row=1, columnspan=2, sticky="EW")

在下面,您使用 label 作为类 migrate_tk 的实例,但在声明它时却没有

enter 小部件不会自动获得焦点,因此当您按 Enter 而不选择小部件时,它不会做任何事情。

你需要做的是取消注释代码:

self.entry.focus_set()

& 之后就可以正常使用了。

【讨论】:

  • 我理解标签错误,但不知道为什么 OnPressEnter 的打印命令不起作用。无论如何,我没有得到属性错误。
  • 这就是我在运行程序时遇到的错误(这是一个错误!)。此外,它的工作方式与我删除此错误时的预期完全相同。请分享您遇到的错误
  • 我使用的是 xubuntu 14.04 和 python3(在 python2.7 上相同)。它不会打印任何错误。它打印的唯一内容是“您单击了按钮!”可能是系统键绑定错误或类似错误?但很奇怪,就在这里发生!
  • 当您点击按钮时,它会说 您点击了按钮! 并且什么也不做,因为在 OnButtonClick()
  • 抱歉,我的意思是 OnPressEnter 函数不打印任何内容。我刚刚编辑了删除 OnButtonClick 的源以清除
猜你喜欢
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多