PythonTkinter事件后OOPS实现
我对Python甚至oops都很陌生,我想把这个解决方案转换成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
#!/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)