使用python创建自己的专属星座签名APP:Name2Constell

这张星座图是不是很酷?实际上这里面隐藏着我的名字!哈哈哈

上链接

https://share.weiyun.com/lyQILoD0

将你的名字变成专属的键盘星座签名!很有趣的小东西,废话少说,下面上教程:

项目概述

键盘轨迹绘制器是一个交互式应用程序,能够将用户输入的文本转换为在虚拟键盘上显示的视觉轨迹,并可以保存为星座风格的图片。

开发环境

  • Python 3.x

  • Pygame库

  • 支持中文字体显示(可选)

核心功能

  1. 实时键盘输入与显示

  2. 大小写字母支持

  3. 虚拟键盘可视化

  4. 星座风格轨迹绘制

  5. 图片导出功能

关键技术实现

1. 键盘布局设计

python

复制代码
# 定义QWERTY键盘布局
keyboard_layout = [
    "1234567890",
    "QWERTYUIOP",
    "ASDFGHJKL",
    "ZXCVBNM"
]

# 计算每个键位的中心坐标
for row_idx, row in enumerate(keyboard_layout):
    y = start_y + row_idx * (key_height + vertical_gap)
    for col_idx, key in enumerate(row):
        x = start_x + col_idx * (key_width + horizontal_gap)
        # 调整行偏移以模拟标准键盘布局
        if row_idx == 1:
            x += key_width // 2
        elif row_idx == 2:
            x += key_width
        elif row_idx == 3:
            x += key_width * 1.5
        
        # 存储键位坐标(同时支持大小写)
        key_positions[key] = (x + key_width // 2, y + key_height // 2)
        if key.isalpha():
            key_positions[key.lower()] = (x + key_width // 2, y + key_height // 2)

2. 星座背景生成

使用固定随机种子确保每次生成的背景一致:

python

复制代码
def create_constellation_background():
    background = pygame.Surface((WIDTH, HEIGHT))
    background.fill(BLACK)
    
    # 使用固定随机种子确保每次生成的星座相同
    random.seed(42)
    
    # 在按键位置添加星星
    stars = []
    for pos in key_positions.values():
        stars.append(pos)
        brightness = random.randint(100, 150)
        size = random.randint(1, 2)
        pygame.draw.circle(background, (brightness, brightness, brightness), pos, size)
    
    # 添加随机星星
    for _ in range(150):
        x = random.randint(0, WIDTH)
        y = random.randint(0, HEIGHT)
        stars.append((x, y))
        brightness = random.randint(50, 100)
        size = random.randint(1, 2)
        pygame.draw.circle(background, (brightness, brightness, brightness), (x, y), size)
    
    # 添加星座连线
    for i in range(len(stars)):
        for j in range(i + 1, len(stars)):
            x1, y1 = stars[i]
            x2, y2 = stars[j]
            distance = math.sqrt((x2 - x1)**2 + (y2 - y1)**2)
            
            # 只连接距离较近的星星
            if distance < 150:
                # 根据距离调整连线透明度
                alpha = int(100 * (1 - distance / 150))
                line_color = (100, 100, 150, alpha)
                
                # 创建临时surface来绘制半透明线
                line_surface = pygame.Surface((WIDTH, HEIGHT), pygame.SRCALPHA)
                pygame.draw.line(line_surface, line_color, (x1, y1), (x2, y2), 1)
                background.blit(line_surface, (0, 0))
    
    return background

3. 轨迹绘制系统

实现了两种显示模式:

  • 实时显示模式:使用清晰明亮的线条和点

  • 导出模式:保持星座风格的半透明效果

python

复制代码
def draw_trajectory(surface, text, is_live_display=False):
    if not text:
        return
    
    points = []
    for char in text:  # 支持大小写输入
        if char in key_positions:
            points.append(key_positions[char])
    
    # 绘制连线
    for i in range(len(points) - 1):
        start_pos = points[i]
        end_pos = points[i+1]
        
        if is_live_display:
            # 实时显示时使用更清晰的线条
            pygame.draw.line(surface, TRAJECTORY_COLOR, start_pos, end_pos, 3)
        else:
            # 导出图片时保持原有样式
            distance = math.sqrt((end_pos[0] - start_pos[0])**2 + (end_pos[1] - start_pos[1])**2)
            alpha = 100
            line_color = (150, 150, 220, alpha)
            line_surface = pygame.Surface((WIDTH, HEIGHT), pygame.SRCALPHA)
            pygame.draw.line(line_surface, line_color, start_pos, end_pos, 2)
            surface.blit(line_surface, (0, 0))
    
    # 绘制点
    for point in points:
        if is_live_display:
            # 实时显示时使用更清晰的点
            pygame.draw.circle(surface, POINT_COLOR, point, 7)
            pygame.draw.circle(surface, WHITE, point, 4)
        else:
            # 导出图片时保持原有样式
            pygame.draw.circle(surface, BRIGHT_STAR, point, 5)
            for r in range(6, 10):
                alpha = 100 - (r - 5) * 20
                if alpha > 0:
                    glow_surface = pygame.Surface((WIDTH, HEIGHT), pygame.SRCALPHA)
                    pygame.draw.circle(glow_surface, (*BRIGHT_STAR, alpha), point, r)
                    surface.blit(glow_surface, (0, 0))

4. 输入处理与用户交互

python

复制代码
# 主循环中的事件处理
for event in pygame.event.get():
    if event.type == QUIT:
        pygame.quit()
        sys.exit()
    
    if event.type == KEYDOWN:
        if event.key == K_BACKSPACE:
            input_text = input_text[:-1]
        elif event.key == K_c and pygame.key.get_mods() & KMOD_CTRL:
            # Ctrl+C 复制
            pygame.scrap.init()
            if pygame.scrap.get_init():
                pygame.scrap.put(pygame.SCRAP_TEXT, input_text.encode('utf-8'))
        elif event.key == K_v and pygame.key.get_mods() & KMOD_CTRL:
            # Ctrl+V 粘贴
            pygame.scrap.init()
            if pygame.scrap.get_init():
                try:
                    pasted_text = pygame.scrap.get(pygame.SCRAP_TEXT)
                    if pasted_text:
                        input_text += pasted_text.decode('utf-8')
                except:
                    pass
        elif event.key == K_s and pygame.key.get_mods() & KMOD_CTRL:
            # Ctrl+S 保存图片
            save_image(input_text)
        else:
            if event.unicode.isprintable():
                input_text += event.unicode  # 保留原始大小写输入

开发挑战与解决方案

  1. 大小写支持问题

    • 挑战:最初只支持大写字母输入

    • 解决方案:为每个字母键同时添加大小写映射

  2. 视觉清晰度与美学平衡

    • 挑战:需要在实时显示清晰度和导出图片的美学效果之间取得平衡

    • 解决方案:实现两种显示模式,实时显示使用清晰样式,导出使用星座样式

  3. 中文字体兼容性

    • 挑战:确保在不同系统上都能正确显示中文

    • 解决方案:尝试多种中文字体,并提供回退机制

  4. 键盘布局准确性

    • 挑战:创建逼真的键盘布局

    • 解决方案:计算每行键位的偏移量,模拟标准键盘的错位排列

使用方法

  1. 运行程序

  2. 在输入框中输入文本(支持大小写字母、数字和空格)

  3. 观察键盘上显示的轨迹

  4. 使用Ctrl+S保存图片

  5. 使用Ctrl+C和Ctrl+V进行复制粘贴操作

扩展可能性

  1. 添加更多键盘键位(功能键、符号键等)

  2. 实现轨迹动画效果

  3. 添加多种视觉主题选择

  4. 支持自定义颜色方案

  5. 添加轨迹回放功能

案例欣赏

|----------------------------------------------------------------------------|----------------------------------------------------------------------------|
| | |
| | |
| | |
| | |
[Name2Constell专属星座签名]

总结

键盘轨迹绘制器项目成功实现了将文本输入转换为视觉轨迹的功能,通过巧妙的设计解决了大小写支持、视觉清晰度和跨平台兼容性等问题。项目展示了Pygame在创建交互式可视化应用方面的强大能力,并为未来扩展提供了良好的基础架构。

下载链接

https://share.weiyun.com/lyQILoD0

相关推荐
z落落1 小时前
C# 类与对象、字段、静态与非静态+四大访问修饰符
开发语言·c#
思麟呀1 小时前
C++工业级日志项目(八)最终上层接口
开发语言·c++
石山代码1 小时前
如何在 C++ 中实现多态?
开发语言·c++
阿方.9181 小时前
C++ std::function 超全精讲 | 原理语法、适配对象、递归实现、回调场景、面试考点、易错坑点
开发语言·c++·bind·function
weixin_468466851 小时前
Markitdown 文档解析快速入门指南
开发语言·python·自动化·编程
我命由我123451 小时前
SEO 与 GEO 极简理解
java·linux·运维·开发语言·学习·算法·运维开发
我材不敲代码1 小时前
Python基础:注释的写法(单行、多行、文档注释)
服务器·python·microsoft
海鸥-w1 小时前
前端学python 第一课安装python环境及开发工具下载安装
python
浮生望1 小时前
Prompt Engineering 实战指南:用 DeepSeek API 写出高质量提示词
python·llm