鱼C论坛

 找回密码
 立即注册
查看: 112|回复: 2

[已解决]Tkinter 如何让画布中的文字不出去,在里面来回运动

[复制链接]
发表于 2025-3-8 14:54:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
from tkinter import *
root=Tk()
def move_n():
      m.move(n,5,0)
      root.after(200,move_n)
m=Canvas(root,width=333,height=444,background="ghostwhite")
m.pack()
point=222,160
n=m.create_text(point,text="3-8 妇女节",fill="magenta")
move_n()
mainloop()

如何让画布中的文字不出去,在里面来回运动?
最佳答案
2025-3-8 14:55:16
要让画布中的文字在里面来回运动,你可以在移动文字时检测文字的位置,并在其到达画布边缘时反转运动方向。以下是一个改进的示例代码:
from tkinter import *

root = Tk()

def move_text():
    global dx
    # 获取文字边界
    x1, y1, x2, y2 = m.bbox(n)
    # 如果文字到达画布的左右边界,则反转方向
    if x2 >= m.winfo_width() or x1 <= 0:
        dx = -dx
    # 移动文字
    m.move(n, dx, 0)
    root.after(200, move_text)

m = Canvas(root, width=333, height=444, background="ghostwhite")
m.pack()

# 初始位置
point = 222, 160
# 创建文字
n = m.create_text(point, text="3-8 妇女节", fill="magenta")

# 设定文字移动速度
dx = 5

# 启动文字移动
move_text()

mainloop()

在这个示例中,用了m.bbox(n)来获取文字的边界,以此判断文字是否到达画布边缘,并通过改变变量dx的值来反转方向。只要检测到文字超出边界或即将超出边界,就调整其移动方向。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2025-3-8 14:55:16 | 显示全部楼层    本楼为最佳答案   
要让画布中的文字在里面来回运动,你可以在移动文字时检测文字的位置,并在其到达画布边缘时反转运动方向。以下是一个改进的示例代码:
from tkinter import *

root = Tk()

def move_text():
    global dx
    # 获取文字边界
    x1, y1, x2, y2 = m.bbox(n)
    # 如果文字到达画布的左右边界,则反转方向
    if x2 >= m.winfo_width() or x1 <= 0:
        dx = -dx
    # 移动文字
    m.move(n, dx, 0)
    root.after(200, move_text)

m = Canvas(root, width=333, height=444, background="ghostwhite")
m.pack()

# 初始位置
point = 222, 160
# 创建文字
n = m.create_text(point, text="3-8 妇女节", fill="magenta")

# 设定文字移动速度
dx = 5

# 启动文字移动
move_text()

mainloop()

在这个示例中,用了m.bbox(n)来获取文字的边界,以此判断文字是否到达画布边缘,并通过改变变量dx的值来反转方向。只要检测到文字超出边界或即将超出边界,就调整其移动方向。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-3-10 14:48:10 | 显示全部楼层
要实现文字在画布边界内来回运动,需要添加位置检测逻辑。首先获取画布宽度,每次移动时检查文字位置是否超出边界,若到达右边缘则将水平移动量设为负数,到达左边缘则设为正数。同时需要获取文字对象的实际尺寸,使用canvas.bbox()方法精确判断边界碰撞。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-2 02:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表