<return>键绑定根本不起作用</return>

时间:2014-05-29 10:16:37

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

我用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()

问题是按下返回键,它不会打印任何东西(显然我将它运行到终端) 谢谢!

1 个答案:

答案 0 :(得分:0)

您可能遇到的问题是:

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 而不选择窗口小部件时,它不会执行任何操作。

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

self.entry.focus_set()

&安培;之后它会正常工作。