You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否让turtle.textinput()的输入提示框显示在指定坐标?

关于turtle.textinput()提示框位置控制的问题

直接通过turtle.textinput()无法实现将提示框固定在画布(0,0)位置或画布范围内,原因是这个函数底层调用的是tkinter的标准对话框组件,turtle库并没有提供接口来修改这个独立对话框的位置参数。

替代解决方案

如果你需要在画布指定位置显示输入框,可以直接结合tkinter来实现,把输入框嵌入到turtle的画布窗口中,这样就能精准控制位置。示例代码如下:

import turtle
import tkinter as tk
from tkinter import simpledialog

def get_canvas_screen_coords(x, y):
    # 将turtle画布坐标转换为屏幕坐标
    canvas = turtle.getcanvas()
    # 获取画布左上角的屏幕坐标
    canvas_x = canvas.winfo_rootx()
    canvas_y = canvas.winfo_rooty()
    # 转换turtle坐标为画布内的像素坐标(turtle默认画布中心是(0,0))
    turtle_width = canvas.winfo_width()
    turtle_height = canvas.winfo_height()
    screen_x = canvas_x + turtle_width // 2 + x
    # turtle的y轴向上,tkinter的y轴向下,所以需要反转
    screen_y = canvas_y + turtle_height // 2 - y
    return screen_x, screen_y

def buttonClick(x, y):
    # 获取(0,0)对应的屏幕坐标
    target_x, target_y = get_canvas_screen_coords(0, 0)
    # 创建tkinter输入对话框并设置位置
    root = tk.Toplevel()
    root.withdraw()  # 隐藏临时主窗口
    # 设置对话框位置:+x+y表示屏幕左上角偏移量
    root.geometry(f"+{target_x}+{target_y}")
    user_inp = simpledialog.askstring("Test input", "put name here", parent=root)
    root.destroy()
    print(user_inp)

t1 = turtle.Turtle()
turtle.onscreenclick(buttonClick, 1)
turtle.done()

这段代码的核心逻辑:

  • 把turtle画布的(0,0)坐标转换为对应的屏幕像素坐标
  • 用tkinter的对话框组件替代原生turtle.textinput(),通过geometry方法将对话框定位到目标位置

内容的提问来源于stack exchange,提问作者Solenad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 08:40:27