在python的tkinter中iconify

时间:2017-09-24 07:22:58

标签: python python-2.7 python-3.x tkinter

我在python 2.7中编写了一个代码,我创建了一个带有两个按钮的根窗口:当我按提交时,提交取消按钮,打开一个新窗口,前一个父/根窗口获得iconify。现在我希望当我剪切子窗口时,父窗口应该是deiconify,我遇到麻烦,在哪里放置条件,以便父窗口得到deiconify?

from Tkinter import *

root = Tk()
root.title("test window")
root.geometry('400x220+500+250')
root.configure(background="dark gray")

def submit(*args):
    root.iconify()
    popup_root_window = Toplevel()
    popup_root_window.geometry('300x50+550+300')
    popup_root_window.resizable(width=False, height=False)
    popup_root_window.focus_force()
    popup_root_window.grab_set()
    popup_root_window_label = Label(popup_root_window, text="new window open successfully.")
    popup_root_window_label.pack(anchor=CENTER, padx=10, pady=20)

frame = Frame(root, bd=4, relief="raise", height=100, width=250)
frame.pack(fill="both", padx=70, pady=35)
frame.pack_propagate(0)

submit_button = Button(frame, text="Submit", command=submit, width=10)
submit_button.grid(row=0, column=0)

cancel_button = Button(frame, text="Cancel", width=10)
cancel_button.grid(row=0, column=1)

root.mainloop()

2 个答案:

答案 0 :(得分:2)

我在3.6中写了下面的内容,但它仍然可以在2.7中使用。

from tkinter import *

class App:
    def __init__(self, root):
        self.root = root
        self.label1 = Label(self.root, text="I'm your main window.")
        self.button = Button(self.root, text="Submit", command=self.command)
        self.label1.pack()
        self.button.pack()
    def command(self):
        self.root.iconify()
        self.top = Toplevel(self.root)
        self.label2 = Label(self.top, text="I'm your toplevel window.")
        self.label2.pack()
        self.top.protocol("WM_DELETE_WINDOW", self.close)
    def close(self):
        self.top.destroy()
        self.root.deiconify()

root = Tk()
App(root)
root.mainloop()

只要从指定窗口的标题栏中选择了.protocol(),您就可以在事件WM_DELETE_WINDOW上使用X来创建回调。

在Windows 10上测试并使用Python 3.6。

答案 1 :(得分:2)

你可以尝试这个。我已经在python 2.7.13中测试了它并且它正常工作。

from Tkinter import *

root = Tk()
root.title("test window")
root.geometry('400x220+500+250')
root.configure(background="dark gray")

def submit(*args):

    def on_closing(*args):
        popup_root_window.destroy()
        root.deiconify()

    root.iconify()
    popup_root_window = Toplevel()
    popup_root_window.geometry('300x50+550+300')
    popup_root_window.resizable(width=False, height=False)
    popup_root_window.focus_force()
    popup_root_window.grab_set()
    popup_root_window_label = Label(popup_root_window, text="new window open successfully.")
    popup_root_window_label.pack(anchor=CENTER, padx=10, pady=20)

    popup_root_window.protocol("WM_DELETE_WINDOW", on_closing)

frame = Frame(root, bd=4, relief="raise", height=100, width=250)
frame.pack(fill="both", padx=70, pady=35)
frame.pack_propagate(0)

submit_button = Button(frame, text="Submit", command=submit, width=10)
submit_button.grid(row=0, column=0)

cancel_button = Button(frame, text="Cancel", width=10)
cancel_button.grid(row=0, column=1)

root.mainloop()