是否可以将 tkinter.simpledialog 窗口居中?

aus*_*der 2 python tk-toolkit tkinter

我在一个更大的脚本中包含了条件密码捕获。代码如下所示:

if thing:  # found token, don't need password
    do stuff
else:  # no token, get password in popup
    try:
        import tkinter as tk
        import tkinter.simpledialog
        tk.Tk().withdraw()
        passwd = tkinter.simpledialog.askstring("Password", "Enter password:", show="*")
        return passwd
Run Code Online (Sandbox Code Playgroud)

从功能上来说还不错,但我的大多数用户都使用分辨率为 3840x1600 的显示器,因此当左上角弹出对话框时很容易错过。

是否有一种简单的方法来覆盖 simpledialog 类以告诉它出现在监视器上的某个 X/Y 处,或者是我构建完整的唯一选择mainloop()

Atl*_*435 5

因此,当左上角弹出对话框时,很容易错过。

如果您指定可选参数parent,对话框将出现在窗口中间并在内部获得焦点。确保您的窗口已映射通过.update_idletasks()以获得相应的坐标。您也可以考虑使窗口透明而不是退出。

import tkinter as tk
import tkinter.simpledialog

def ask_pw():
    pw = tkinter.simpledialog.askstring("Password",
                                        "Enter password:",
                                        show="*",
                                        parent=root)
root = tk.Tk()
root.geometry('250x250+500+500')
root.update_idletasks()
ask_pw()
#root.withdraw()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)