【趣味Python】第1课:使用tkinter实现疯狂弹幕效果

专栏导读

在这里插入图片描述

  • 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手

  • 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注

  • 👍 该系列文章专栏:请点击——>Python办公自动化专栏求订阅

  • 🕷 此外还有爬虫专栏:请点击——>Python爬虫基础专栏求订阅

  • 📕 此外还有python基础专栏:请点击——>Python基础学习专栏求订阅

  • 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏

  • ❤️ 欢迎各位佬关注! ❤️

🧠 前言

在视频网站上,“弹幕”是一种非常流行的互动方式,文字从右向左飞过屏幕,实时表达观众情绪。你是否想过,其实只需要用 Python 和自带的 GUI 库 Tkinter,也能实现一个类似效果的小工具?

今天我们就来用 Python 手写一个“疯狂弹幕”的效果,窗口一打开,弹幕飞满屏,完全停不下来!适合:

  • 做一些有趣的界面展示;
  • 活跃现场气氛;
  • 学习 Tkinter 动态动画的基本原理。

🧰 技术栈

  • Python 3.x

  • Tkinter 图形界面库(标准库自带)

  • 字体、颜色、动画基础

🚀 效果展示

  • 运行程序后,将看到五彩缤纷的文字从右往左飞过窗口,弹幕内容随机生成,颜色和字体大小各不相同,非常具有视觉冲击力。

在这里插入图片描述

🧩 核心思路

  • 1. Tkinter 创建窗口:设置固定大小窗口背景为黑色;

  • 2. 定时生成弹幕:随机选择内容、颜色、字体,在窗口顶部随机位置创建文字标签;

  • 3. 移动弹幕标签:每 30ms 移动一次标签位置,模拟“飞行”效果;

  • 4. 弹幕移出屏幕后自动销毁,节省资源;

  • 5. 无限循环生成新弹幕,让屏幕永远“炸”起来!

🧩库的安装

用途安装
tkinter界面设计pip install tkinter -i https://pypi.tuna.tsinghua.edu.cn/simple/

4、完整代码

import tkinter as tk
import random
from tkinter import font as tkFont


class DanmuApp:
    def __init__(self, root):
        self.root = root
        self.root.title("弹幕演示")
        self.root.geometry("800x600")  # 设置固定窗口大小
        self.root.configure(bg='black')

        # 弹幕内容
        self.danmu_list = [
            "这是一条弹幕", "Hello World!", "Python真强大",
            "Tkinter实现弹幕", "好好学习天天向上", "666666",
            "弹幕效果不错", "颜色随机变化", "速度也可以调整",
            "支持多行弹幕", "字体大小随机", "从右向左滚动"
        ]

        # 颜色列表
        self.colors = ['red', 'yellow', 'green', 'cyan', 'white', 'pink', 'orange']

        # 字体列表(使用通用字体)
        self.fonts = [
            tkFont.Font(family="Arial", size=20),
            tkFont.Font(family="Courier New", size=22),
            tkFont.Font(family="Helvetica", size=18),
        ]

        self.active_danmus = []

        # 稍后启动弹幕,等窗口初始化完成
        self.root.after(100, self.start_danmu)

        # 启动移动函数
        self.root.after(30, self.move_danmus)

        # 绑定 ESC 键退出
        self.root.bind('<Escape>', lambda e: self.root.destroy())

    def start_danmu(self):
        # 获取窗口尺寸
        self.window_width = self.root.winfo_width()
        self.window_height = self.root.winfo_height()
        self.generate_danmu()

    def generate_danmu(self):
        text = random.choice(self.danmu_list)
        color = random.choice(self.colors)
        font = random.choice(self.fonts)

        y_pos = random.randint(20, self.window_height - 40)

        label = tk.Label(
            self.root,
            text=text,
            fg=color,
            bg='black',
            font=font
        )

        label.place(x=self.window_width, y=y_pos)

        danmu_info = {
            'label': label,
            'speed': random.randint(5, 15),
            'y_pos': y_pos
        }

        self.active_danmus.append(danmu_info)

        # 下一条弹幕出现的时间
        self.root.after(random.randint(300, 1000), self.generate_danmu)

    def move_danmus(self):
        for danmu in self.active_danmus[:]:
            label = danmu['label']
            current_x = label.winfo_x()
            new_x = current_x - danmu['speed']

            if new_x < -label.winfo_width():
                label.destroy()
                self.active_danmus.remove(danmu)
            else:
                label.place(x=new_x, y=danmu['y_pos'])

        self.root.after(30, self.move_danmus)


if __name__ == "__main__":
    root = tk.Tk()
    app = DanmuApp(root)
    root.mainloop()

总结

  • 希望对初学者有帮助

  • 致力于办公自动化的小小程序员一枚

  • 希望能得到大家的【一个免费关注】!感谢

  • 求个 🤞 关注 🤞

  • 此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏

  • 求个 ❤️ 喜欢 ❤️

  • 此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏

  • 求个 👍 收藏 👍

  • 此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小庄-Python办公

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值