Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
PythonTkinter事件后OOPS实现_Python_Oop_Tkinter - Fatal编程技术网

PythonTkinter事件后OOPS实现

PythonTkinter事件后OOPS实现,python,oop,tkinter,Python,Oop,Tkinter,我对Python甚至oops都很陌生,我想把这个解决方案转换成oops,但它不起作用。我不知道我应该把后面的、勾选的和重置的功能放在哪里才能完成这项工作 #!/usr/bin/python # -*- coding: iso-8859-1 -*- import Tkinter import time class simpleapp_tk(Tkinter.Tk): def __init__(self,parent): Tkinter.Tk.__init__(self,p

我对Python甚至oops都很陌生,我想把这个解决方案转换成oops,但它不起作用。我不知道我应该把后面的、勾选的和重置的功能放在哪里才能完成这项工作

#!/usr/bin/python
# -*- coding: iso-8859-1 -*-

import Tkinter
import time

class simpleapp_tk(Tkinter.Tk):
    def __init__(self,parent):
        Tkinter.Tk.__init__(self,parent)
        self.parent = parent
        self.running = None
        self.initialize()

    def initialize(self):
        self.grid()

        self.entryVariable = Tkinter.StringVar()
        self.entry = Tkinter.Entry(self,textvariable=self.entryVariable)
        self.entry.grid(column=0,row=0,sticky='EW')
        self.entry.bind("<Return>", self.OnPressEnter)
        self.entryVariable.set(u"Enter text here.")

        button = Tkinter.Button(self,text=u"Click me !",
                                command=self.OnButtonClick)
        button.grid(column=1,row=0)

        self.labelVariable = Tkinter.StringVar()
        label = Tkinter.Label(self,textvariable=self.labelVariable,
                              anchor="w",fg="white",bg="blue")
        label.grid(column=0,row=1,columnspan=2,sticky='EW')
        self.labelVariable.set(u"Hello !")

        self.grid_columnconfigure(0,weight=1)
        self.resizable(True,False)
        self.update()
        self.geometry(self.geometry())       
        self.entry.focus_set()
        self.entry.selection_range(0, Tkinter.END)
        self.after(1000, self.tick())
        self.eventbind()

    def OnButtonClick(self):
        self.labelVariable.set( self.entryVariable.get()+" (You clicked the button)" )
        self.entry.focus_set()
        self.entry.selection_range(0, Tkinter.END)

    def OnPressEnter(self,event):
        self.labelVariable.set( self.entryVariable.get()+" (You pressed ENTER)" )
        self.entry.focus_set()
        self.entry.selection_range(0, Tkinter.END)

    def reset(self, *ignore): 
        self.running = None

    def tick(self, *ignore):
        if not self.running:
            self.running = time.time()
        elif time.time() - self.running > 5:
            print 'I waited 5 seconds...'
            self.running = None
        self.after(1000,self.tick())

    def eventbind(self):
        self.bind('<KEY>',self.reset())
        self.bind('<Button-1>',self.reset())



if __name__ == "__main__":
    app = simpleapp_tk(None)
    app.title('my application')
    app.mainloop()
#/usr/bin/python
#-*-编码:iso-8859-1-*-
进口Tkinter
导入时间
类simpleapp_tk(Tkinter.tk):
定义初始化(自身,父级):
Tkinter.Tk.\uuuuu init\uuuuuu(自,父)
self.parent=parent
self.running=无
self.initialize()
def初始化(自):
self.grid()
self.entryVariable=Tkinter.StringVar()
self.entry=Tkinter.entry(self,textvariable=self.entryVariable)
self.entry.grid(列=0,行=0,sticky='EW')
self.entry.bind(“,self.on按Enter键)
self.entryVariable.set(u“在此处输入文本”)
button=Tkinter.button(self,text=u“单击我!”,
command=self.onButton(单击)
button.grid(列=1,行=0)
self.labelVariable=Tkinter.StringVar()
label=Tkinter.label(self,textvariable=self.labelVariable,
anchor=“w”,fg=“白色”,bg=“蓝色”)
label.grid(column=0,row=1,columnspan=2,sticky='EW')
self.labelVariable.set(u“Hello!”)
self.grid\u column配置(0,权重=1)
self.reshable(真、假)
self.update()
self.geometry(self.geometry())
self.entry.focus_set()
self.entry.selection_范围(0,Tkinter.END)
self.after(1000,self.tick())
self.eventbind()
def ON按钮单击(自身):
self.labelVariable.set(self.entryVariable.get()+“(您单击了按钮)”)
self.entry.focus_set()
self.entry.selection_范围(0,Tkinter.END)
def OnPressEnter(自我,事件):
self.labelVariable.set(self.entryVariable.get()+“(按ENTER键)”)
self.entry.focus_set()
self.entry.selection_范围(0,Tkinter.END)
def重置(自我,*忽略):
self.running=无
def勾选(自我,*忽略):
如果不是自动运行:
self.running=time.time()
elif time.time()-self.running>5:
打印“我等了5秒…”
self.running=无
self.after(1000,self.tick())
def eventbind(自):
self.bind(“”,self.reset())
self.bind(“”,self.reset())
如果名称=“\uuuuu main\uuuuuuuu”:
app=simpleapp_tk(无)
app.title(“我的应用程序”)
app.mainloop()

在-和绑定-函数之后,您实际上调用了它们(使用
()
),而不是将
勾选
-和
rest
-函数传递给
函数,因此您会遇到堆栈溢出


应该是

self.after(1000, self.tick)
初始化
勾选
中;而且

self.bind('<KEY>',self.reset())
self.bind('<Button-1>',self.reset())
self.bind(“”,self.reset())
self.bind(“”,self.reset())
应该是

self.bind('<Key>',self.reset) # note also your type here: it's Key not KEY
self.bind('<Button-1>',self.reset)
self.bind(“”,self.reset)#注意这里的输入:它是键而不是键
self.bind(“”,self.reset)

是的,谢谢,我改变了,它工作了,这是最好的方法吗?我是说我们为什么不把“.after”放在main后面呢。很抱歉,我来自函数背景,对OOP没有什么不舒服。如果您的代码正在运行,并且您需要关于优化的反馈或建议,我认为最好访问,因为它专门用于,您知道,代码审查。谢谢发布它
self.bind('<Key>',self.reset) # note also your type here: it's Key not KEY
self.bind('<Button-1>',self.reset)