单击条目 Window 未关闭时打开子项 Window
Opening a Child Window When Clicking An Entry Window Is Not Getting Closed
一个。有一个简单的程序,我想从主程序 window 打开一个子程序 window。
b.我有一个打开按钮,当我单击它时它会打开一个新的 window,当我按下子 window 中的关闭按钮时它会关闭子 window。
C。同样,我想在条目小部件中使用相同的选项。
d.当我单击条目小部件输入内容时,这应该会弹出一个子项 window,提供一些用户提示。
d.此函数按预期打开子进程 window,但是当我单击子进程中的关闭按钮时,它没有关闭。
#!/tools/bin/python
from Tkinter import *
#import Tkinter as tk
class MyFirstGUI:
cw = None
def __init__(self, master):
self.master = master
master.title("A simple GUI")
self.label = Label(master, text="This is our first GUI!")
self.label.pack()
self.greet_button = Button(master, text="Greet", command=self.greet)
self.greet_button.pack()
self.close_button = Button(master, text="Close", command=quit)
self.close_button.pack()
self.open_button = Button(master, text="Open", command=self.create_window)
self.open_button.pack()
self.scae1 = Entry(root, width=43, bg="yellow")
self.scae1.delete(0, END)
self.scae1.insert(0, 'Enter The World')
self.scae1.bind('<FocusIn>', self.scae1_entry_click)
self.scae1.pack()
def greet(self):
print("Greetings!")
def create_window(self):
self.cw = Toplevel()
self.cw.wm_title("A New Window")
self.l = Label(self.cw, text="This is window")
self.l.pack()
self.cw_text = Text(self.cw)
self.cw_text.insert('1.0', "Please Enter the Following")
self.cw_text.pack()
self.close_button = Button(self.cw, text="Close", command=self.close_window)
self.close_button.pack()
def close_window(self):
if self.cw:
try: self.cw.destroy()
except (): pass # fill in the error here
self.cw = None
def scae1_entry_click(self,event):
if (self.scae1):
if self.scae1.get() == 'Enter The World':
self.scae1.delete(0, "end") # delete all the text in the entry
self.scae1.insert(0, '') #Insert blank for user input
self.scae1.configure(bg="white")
self.create_window()
root = Tk()
my_gui = MyFirstGUI(root)
root.mainloop()
如果有人能提出一些建议或评论,为什么当您从条目小部件打开它时 window 没有关闭它,那就太好了。
感谢 Adv,
维莫
哇,这是一个非常有趣的错误。但是你的逻辑有一个循环。所以发生的事情是,如果你关闭你的 toplevel-Window,Entry
-Widget 会自动获得焦点。如果发生这种情况,您的绑定将再次触发。所以只需更改此行:
self.scae1.bind('<FocusIn>', self.scae1_entry_click)
对此:
self.scae1.bind('<Button-1>', self.scae1_entry_click)
或者确保您的条目失去焦点。
一个。有一个简单的程序,我想从主程序 window 打开一个子程序 window。 b.我有一个打开按钮,当我单击它时它会打开一个新的 window,当我按下子 window 中的关闭按钮时它会关闭子 window。 C。同样,我想在条目小部件中使用相同的选项。 d.当我单击条目小部件输入内容时,这应该会弹出一个子项 window,提供一些用户提示。 d.此函数按预期打开子进程 window,但是当我单击子进程中的关闭按钮时,它没有关闭。
#!/tools/bin/python
from Tkinter import *
#import Tkinter as tk
class MyFirstGUI:
cw = None
def __init__(self, master):
self.master = master
master.title("A simple GUI")
self.label = Label(master, text="This is our first GUI!")
self.label.pack()
self.greet_button = Button(master, text="Greet", command=self.greet)
self.greet_button.pack()
self.close_button = Button(master, text="Close", command=quit)
self.close_button.pack()
self.open_button = Button(master, text="Open", command=self.create_window)
self.open_button.pack()
self.scae1 = Entry(root, width=43, bg="yellow")
self.scae1.delete(0, END)
self.scae1.insert(0, 'Enter The World')
self.scae1.bind('<FocusIn>', self.scae1_entry_click)
self.scae1.pack()
def greet(self):
print("Greetings!")
def create_window(self):
self.cw = Toplevel()
self.cw.wm_title("A New Window")
self.l = Label(self.cw, text="This is window")
self.l.pack()
self.cw_text = Text(self.cw)
self.cw_text.insert('1.0', "Please Enter the Following")
self.cw_text.pack()
self.close_button = Button(self.cw, text="Close", command=self.close_window)
self.close_button.pack()
def close_window(self):
if self.cw:
try: self.cw.destroy()
except (): pass # fill in the error here
self.cw = None
def scae1_entry_click(self,event):
if (self.scae1):
if self.scae1.get() == 'Enter The World':
self.scae1.delete(0, "end") # delete all the text in the entry
self.scae1.insert(0, '') #Insert blank for user input
self.scae1.configure(bg="white")
self.create_window()
root = Tk()
my_gui = MyFirstGUI(root)
root.mainloop()
如果有人能提出一些建议或评论,为什么当您从条目小部件打开它时 window 没有关闭它,那就太好了。
感谢 Adv, 维莫
哇,这是一个非常有趣的错误。但是你的逻辑有一个循环。所以发生的事情是,如果你关闭你的 toplevel-Window,Entry
-Widget 会自动获得焦点。如果发生这种情况,您的绑定将再次触发。所以只需更改此行:
self.scae1.bind('<FocusIn>', self.scae1_entry_click)
对此:
self.scae1.bind('<Button-1>', self.scae1_entry_click)
或者确保您的条目失去焦点。