python - 在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()
解决方案
那是因为对话框默认将父窗口设置为主窗口。您只需要将父级添加到第二个窗口。
path = filedialog.askopenfilename(initialdir="/c", title="Choose File", parent=self)
推荐阅读
- node.js - NodeJS 和 Express - 由于身份验证问题,我的测试失败了,我找不到原因
- excel - 基于 Roll 计算胜率
- haskell - 使用 cabal 安装库时无法解决依赖关系
- mongodb - 将 mongodb 中的集合导出到 csv 时出错
- excel - 有没有办法从 Excel 的 VSTO 加载项引用打开的 Microsoft Edge 浏览器?(因为旧的 excel 插件可以参考 IE)
- reactjs - 使用 TypeScript 做出反应:如何使用先前的状态键入 useState 钩子
- .net - 即使重命名旧 DLL,也无法加载文件或程序集错误
- javascript - WebSocket 的 Google IAP 身份验证
- node.js - 将长时间运行的 Promise 与流 Nodejs 一起使用时,堆内存会爆炸
- python - 如何将 OrderedDict 转换为嵌套的 OrderedDict?