使用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

相关推荐
金銀銅鐵3 小时前
[Python] 从《千字文》中随机挑选汉字
后端·python
cup117 小时前
[技术复盘] Windows Python 打包实战:Nuitka 环境踩坑总结与 CI 自动化构建全指南
python·ai·环境变量·ci·nuitka·skill
aqi009 小时前
15天学会AI应用开发(七)有了大模型为什么还要引入RAG
人工智能·python·大模型·ai编程·ai应用
金銀銅鐵11 小时前
用 Python 实现 Take-Away 游戏
python·游戏
copyer_xyf12 小时前
Agent 流程编排
后端·python·agent
copyer_xyf12 小时前
Agent RAG
后端·python·agent
copyer_xyf12 小时前
【RAG】向量数据库:milvus
后端·python·agent
copyer_xyf13 小时前
Agent 记忆管理
后端·python·agent
星云穿梭1 天前
用Python写一个带图形界面的学生管理系统——完整教程
python