Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python <;回报>;键绑定不';我根本不工作_Python_Python 3.x_Tkinter_Key Bindings - Fatal编程技术网

Python <;回报>;键绑定不';我根本不工作

Python <;回报>;键绑定不';我根本不工作,python,python-3.x,tkinter,key-bindings,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

我正在用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.entry.focus_set()
从tkinter导入*
类迁移_tk(tk):
定义初始化(自身,父级):
Tk.\uuuuuuuuuuuuuuuuuuuuu初始(自我,父)
自几何(“400x400”)
self.parent=parent
self.initialize()
def初始化(自):
self.grid()
self.entry=entry(self)
self.entry.grid(列=0,行=0,sticky='EW')
#~self.entry.focus_set()
self.entry.bind(“,self.on按Enter键)
#~self.bind(“”,self.onpresenter)
标签=标签(self,anchor=“w”,fg=“白色”,bg=“蓝色”)
label.grid(列=0,行=1,列span=2,sticky=“EW”)
self.grid\u column配置(0,权重=1)
self.reshable(真、假)
def OnPressEnter(自我,事件):
打印(“按enter键”)
如果self.label[“bg”]=“蓝色”:
self.label[“bg”]=“黄色”
else:self.label[“bg”]=“蓝色”
如果名称=“\uuuuu main\uuuuuuuu”:
app=migrate_tk(无)
app.title(“app”)
app.mainloop()
问题是,按return键,它不会打印任何内容(很明显,我将其运行到终端)
谢谢

您可能遇到的问题是:

AttributeError: 'tkapp' object has no attribute 'label'
&原因是: 您必须在声明
标签时执行此操作:

self.label = Label(self, anchor="w", fg="white", bg="blue")
self.label.grid(column=0, row=1, columnspan=2, sticky="EW")
在下面,您使用label作为class
migrate\u tk
的实例,但在声明它时却没有

enter小部件不会自动获得焦点,因此当您在未选择小部件的情况下按enter时,它不会执行任何操作

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

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.entry.focus_set()

&之后它会很好地工作。

如果您可以将示例简化为解释问题所需的代码,这会有所帮助。当我运行代码时,我会得到堆栈跟踪,但也会得到“you pressed enter”(您按enter键),标签会变为黄色。所以看起来装订很好。但是,您忘记分配
self.label
,这就是您获得堆栈跟踪的原因。我理解标签错误,但不理解OnPressCenter的打印命令不起作用的原因。无论如何,我没有得到属性error。这就是我在运行程序时遇到的错误(这是一个错误!)。此外,它的工作原理与我删除此错误时的工作原理完全相同。请分享您在使用xubuntu 14.04和python3时遇到的错误(python2.7上相同)。它不会打印任何错误。它打印的唯一内容是“您单击了按钮!”可能是系统密钥绑定错误或类似错误?但奇怪的是,它就发生在这里!当你点击按钮时,它会说你点击了按钮请不要执行其他操作,因为OnButtonClick()中没有其他内容。抱歉,我的意思是OnPressEnter函数不打印任何内容。我刚刚编辑了源代码删除按钮单击以清除