能否让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
相关产品推荐
相关产品推荐

