[D]关于tkinter
最近开始学习tkinter,用的是an-introduction-to-tkinter,在实践书上代码时出的问题:
这是书上的自定义类:
- Python code
# File: tkSimpleDialog.pyfrom Tkinter import *import osclass Dialog(Toplevel): def __init__(self, parent, title = None): Toplevel.__init__(self, parent) self.transient(parent) if title: self.title(title) self.parent = parent self.result = None # body = Frame(self) self.initial_focus = self.body(body) body.pack(padx=5, pady=5) self.buttonbox() self.grab_set() if not self.initial_focus: self.initial_focus = self self.protocol("WM_DELETE_WINDOW", self.cancel) self.geometry("+%d+%d" % (parent.winfo_rootx()+50, parent.winfo_rooty()+50)) self.initial_focus.focus_set() self.wait_window(self) # # construction hooks def body(self, master): # create dialog body. return widget that should have # initial focus. this method should be overridden pass def buttonbox(self): # add standard button box. override if you don't want the # standard buttons box = Frame(self) w = Button(box, text="OK", width=10, command=self.ok, default=ACTIVE) w.pack(side=LEFT, padx=5, pady=5) w = Button(box, text="Cancel", width=10, command=self.cancel) w.pack(side=LEFT, padx=5, pady=5) self.bind("<Enter>", self.ok) self.bind("<Escape>", self.cancel) box.focus_set() box.pack() # # standard button semantics def ok(self, event=None): if not self.validate(): self.initial_focus.focus_set() # put focus back return self.withdraw() self.update_idletasks() self.apply() self.cancel() def cancel(self, event=None): # put focus back to the parent window self.parent.focus_set() self.destroy() # # command hooks def validate(self): return 1 # override def apply(self): pass # override这是上面类的继承类:from Tkinter import *import tkSimpleDialogclass MyDialog(tkSimpleDialog.Dialog): def body(self, master): Label(master, text="First:").grid(row=0) Label(master, text="Second:").grid(row=1) self.e1 = Entry(master) self.e2 = Entry(master) self.e1.grid(row=0, column=1) self.e2.grid(row=1, column=1) return self.e1 # initial focus def apply(self): first = (self.e1.get()) second = (self.e2.get()) print(first, second) # or something root=Tk()dialog=MyDialog(root)root.mainloop()然而每次运行时出现的dialog窗口在鼠标移上去没有进行任何操作就会消失,命令行上print:'','',查过了tkinter文档中涉及的每个方法,还是没找出原因,求教
-------------------------
Double行动:
原帖分数:40
帖子加分:40
[解决办法]
你可能抄错了吧,self.bind("<Enter>", self.ok)这个就是绑定鼠标进入就apply退出,你没机会输入的。这个文件在Pythonxx\Lib\lib-tk里面就有的,它是self.bind("<Return>", self.ok)绑定回车才apply。所以把你提供的tkSimpleDialog.py删了吧...