为啥魔法指令创建的对话框不能居中显示
回答
收藏

为啥魔法指令创建的对话框不能居中显示

无锡福记
2025-08-01 09:58·浏览量:123
无锡福记
发布于 2025-08-01 09:57更新于 2025-08-01 09:58123浏览

如题,魔法指令创建的对话框每次都在左上角,这个怎么调整

import tkinter as tk

from tkinter import simpledialog

from typing import *

try:

   from xbot.app.logging import trace as print

except:

   from xbot import print

def create_centered_dialog(default_text="天地人和"):

   """

   title: 创建屏幕居中对话框

   description: 创建一个屏幕居中的对话框,默认值为 % default_text %,用户可以进行修改,并返回用户输入的内容。

   inputs:

       - default_text (str): 对话框的默认文本,eg: "天地人和"

   outputs:

       - user_input (str): 用户输入的文本,eg: "修改后的文本"

   """

       # 检查输入参数类型

   if not isinstance(default_text, str):

       raise TypeError("默认文本必须是字符串类型")

       class CenteredDialog(simpledialog.Dialog):

       def __init__(self, parent, title, prompt, initialvalue=None):

           self.prompt = prompt

           self.initialvalue = initialvalue

           self.result = None

           super().__init__(parent, title)

         

       def body(self, master):

           tk.Label(master, text=self.prompt).grid(row=0, padx=5, pady=5)

           self.entry = tk.Entry(master, width=30)

           self.entry.grid(row=1, padx=5, pady=5)

           if self.initialvalue:

               self.entry.insert(0, self.initialvalue)

               self.entry.select_range(0, tk.END)

           return self.entry

         

       def apply(self):

           self.result = self.entry.get()

         

       def center_window(self):

           self.update_idletasks()

           width = self.winfo_width()

           height = self.winfo_height()

           x = (self.winfo_screenwidth() // 2) - (width // 2)

           y = (self.winfo_screenheight() // 2) - (height // 2)

           self.geometry(f"{width}x{height}+{x}+{y}")

           

       def show(self):

           self.wait_visibility()

           self.center_window()

           self.grab_set()

           self.wait_window()

           return self.result

   

   # 创建根窗口

   root = tk.Tk()

   root.withdraw()  # 隐藏主窗口

   

   # 创建并显示自定义对话框

   dialog = CenteredDialog(

       root,

       "输入对话框",

       "请输入内容:",

       default_text

   )

   

   result = dialog.show()

   

   # 关闭根窗口

   root.destroy()

   

   # 如果用户取消输入,返回提示信息

   if result is None:

       return "用户取消了输入"

   

   return result

收藏
全部回答1
最新
发布回答
回答