4 回答
TA贡献1816条经验 获得超4个赞
直接的方法是使用winfo_exists():
root.option_wnd = None # Init value
def press_enter(event):
#messagebox.showinfo("Inside")
selected=trv.focus()
print(trv.item(selected))
print(str((event.keysym)))
if str((event.keysym))=='Return':
if root.option_wnd and root.option_wnd.winfo_exists():
root.option_wnd.lift() # make this window on the top.
else: # create this window
root.option_wnd = tk.Toplevel(root)
.....
但我认为你不需要每次用户输入时都创建这个窗口。Enter在开始时创建它,只需在用户输入时显示它Enter
例如:
root = tk.Tk()
option_wnd = tk.Toplevel()
option_wnd.wm_protocol("WM_DELETE_WINDOW", option_wnd.withdraw) # when user try to close this window, hide it instead of destroy it
.....
option_wnd.withdraw() # hide this window
def press_enter(event):
#messagebox.showinfo("Inside")
selected=trv.focus()
print(trv.item(selected))
print(str((event.keysym)))
if str((event.keysym))=='Return':
option_wnd.deiconify() # show it.
TA贡献2041条经验 获得超4个赞
我能想到的一个选项是像这样绑定选项窗口:
option_wnd.bind('<Return>', lambda e: option_wnd.close()) # or withdraw() or quit() ?
将选项窗口绑定到按下 Enter 键时它会关闭(尽管我不知道上述函数的差异(有,所以你应该查找)),但是如果你想使用Enter
(返回)输入值,这可能会妨碍你键,因为它将关闭窗口。另一个选项是将选项窗口绑定到此事件:
option_wnd.bind('<FocusOut>', lambda e: option_wnd.close())
这是当窗口不再受到关注时,因此如果您按 Enter 键,它将打开一个新窗口,但仍然打赌旧窗口应该关闭。您也可以尝试用某些东西进行一些逻辑编程,例如当输入按下“打开”模式时,再次按下它不会打开窗口,而当您关闭现有窗口时,它将再次允许这种情况。
TA贡献1871条经验 获得超8个赞
def press_enter(event):
#messagebox.showinfo("Inside")
root.deiconify ()
selected=trv.focus()
print(trv.item(selected))
print(str((event.keysym)))
if str((event.keysym))=='Return':
option_wnd=Toplevel(root)
option_wnd.geometry('200x200')
option_wnd.title('Option Window')
option_wnd.grab_set()
#option_wnd.pack()
TA贡献1876条经验 获得超5个赞
如果您不使用类,您可以执行以下操作:
options_displayed = False #global
def option_closed(w):
global options_displayed
w.destroy() #close the actual window
options_displayed = False # log the fact it is now close
def press_enter(event):
global options_displayed # reference global variable
#messagebox.showinfo("Inside")
selected=trv.focus()
print(trv.item(selected))
print(str((event.keysym)))
if str((event.keysym))=='Return' and not options_displayed:
option_wnd=Toplevel(root)
option_wnd.geometry('200x200')
option_wnd.title('Option Window')
option_wnd.grab_set()
option_wnd.grab_set()
option_wnd.protocol("WM_DELETE_WINDOW", lambda w= option_wnd :option_closed(w))
添加回答
举报