首页 > 解决方案 > 在python中打开对话框时主窗口获得焦点

问题描述

我在 Windows 上使用 python3,当我按下“open_dialog_button”时,确实打开了一个对话框(最重要的是窗口,这很好)但是主窗口在新窗口前面跳跃,我该如何防止当我按下对话框按钮时获得焦点的主窗口?我希望主窗口位于对话框窗口的后面,然后是新窗口,我尝试了 lift() 但它在对话框窗口之前和之后工作,而不是在对话框按钮的过程中,我也尝试了属性( '-topmost', True) 但是新窗口也在对话框窗口上方,我不希望这样..
这只是我的具体问题的代码示例:

import tkinter.ttk as ttk
import tkinter as tk
from tkinter import filedialog


class MainWindow(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        self.title("main window")
        self.geometry('100x100')
        self.new_window_button = ttk.Button(self, text="open new window", command=self.open_new_window)
        self.new_window_button.pack()

    def open_new_window(self):
        NewWindow(self)


class NewWindow(tk.Toplevel):
    def __init__(self, master, *args, **kwargs):
        tk.Toplevel.__init__(self, master, *args, **kwargs)
        self.title("new window")
        self.geometry('100x100')
        path = ""
        self.open_dialog_button = ttk.Button(self, text='open dialog', command=self.open_dialog)
        self.open_dialog_button.pack()

    def open_dialog(self):
        global path
        path = filedialog.askopenfilename(initialdir="/c", title="Choose File")


def main():
    run = MainWindow()
    run.mainloop()


if __name__ == '__main__':
    main()

标签: pythonpython-3.xtkinter

解决方案


那是因为对话框默认将父窗口设置为主窗口。您只需要将父级添加到第二个窗口。

path = filedialog.askopenfilename(initialdir="/c", title="Choose File", parent=self)

推荐阅读