【问题标题】:Opening a Child Window When Clicking An Entry Window Is Not Getting Closed单击条目窗口时打开子窗口未关闭
【发布时间】:2016-05-04 18:55:39
【问题描述】:

一个。有一个简单的程序,我想从主窗口打开一个子窗口。 湾。我有一个打开按钮,当我单击它会打开一个新窗口时,当我按下子窗口中的关闭按钮时,它会关闭子窗口。 C。同样,我希望在条目小部件中使用相同的选项。 d。当我单击条目小部件输入内容时,这应该会弹出一个子窗口,提供一些用户提示。 d。此功能按预期打开子窗口,但是当我单击子进程中的关闭按钮时,它没有关闭。

#!/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()

如果有人提供一些建议或说明为什么当您从条目小部件打开此子窗口时没有关闭它,那就太好了。

感谢 Adv, 维莫

【问题讨论】:

    标签: python python-2.7 tkinter tkinter-canvas


    【解决方案1】:

    哇,这是一个非常有趣的错误。但是你的逻辑中有一个循环。所以发生的事情是,如果您关闭顶层窗口,Entry-Widget 会自动获得焦点。如果发生这种情况,您的绑定将再次触发。所以只要改变这一行:

    self.scae1.bind('<FocusIn>', self.scae1_entry_click)
    

    到这里:

    self.scae1.bind('<Button-1>', self.scae1_entry_click)
    

    或者确保您的条目失去焦点。

    【讨论】:

    • 谢谢 VRage .. 那行得通.. 是否可以将两个选项映射到同一个事件.. 类似 self.scae1.bind('', self. scae1_entry_click) ??
    • 没问题,请将此答案标记为正确。当然你可以多次使用bind方法:`self.scae1.bind('', self.scae1_entry_click) self.scae1.bind('', self.scae1_entry_click)`跨度>
    猜你喜欢
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 2013-07-23
    • 2019-10-06
    • 2020-03-19
    相关资源
    最近更新 更多