零基础入门使用 Python 实现大乐透号码生成器(Tkinter 可视化)

零基础实现 Python 大乐透号码生成器(Tkinter 可视化)

教程概述

本教程将带领零基础学习者,使用 Python 的 Tkinter 库制作一个可视化大乐透号码生成器。最终效果为:拥有美观的图形界面,点击按钮可生成号码,前 5 位基本号显示在蓝色无边框圆圈中,后 2 位特别号显示在黄色无边框圆圈中,支持生成 10 组号码及一键清除功能。
零基础入门使用 Python 实现大乐透号码生成器(Tkinter 可视化)

前置准备

1. 环境要求

安装 Python 3.x 版本(推荐 3.8 及以上,官网:https://www.python.org/downloads/)
无需额外安装 Tkinter(Python3.x 默认自带)

2. 工具选择

代码编辑器:推荐 VS Code(免费、轻量,官网:https://code.visualstudio.com/)
也可使用 Python 自带的 IDLE(安装 Python 后自动生成)

教程步骤

第一步:了解核心知识点

Tkinter:Python 内置的图形界面开发库,用于快速创建窗口、按钮、标签等可视化元素。
随机数生成:使用
random
库生成不重复的大乐透号码。
函数编程:将功能拆分成独立函数,让代码结构清晰、易于理解。

第二步:创建基础窗口

首先编写代码创建程序的主窗口,这是所有可视化元素的容器。

代码片段

# 导入需要的库
# tkinter:用于创建图形界面,简写为tk
import tkinter as tk
# messagebox:用于弹出提示对话框
from tkinter import messagebox
# random:用于生成随机号码
import random

# 1. 创建主窗口对象,Tk()是Tkinter库的核心函数,创建一个空白窗口
root = tk.Tk()
# 设置窗口标题,显示在窗口顶部标题栏
root.title("大乐透号码生成器")
# 设置窗口初始大小,格式为"宽x高"(单位:像素)
root.geometry("700x550")
# 设置窗口是否可缩放,两个参数分别控制水平和垂直方向,True表示可缩放
root.resizable(True, True)
# 设置窗口背景色,使用十六进制颜色码(#F5F5F5为浅灰色)
root.configure(bg="#F5F5F5")

# 2. 定义全局变量:用于记录已生成的号码组数,初始值为0
group_count = 0

# 3. 定义号码圆圈颜色(将RGB值转换为十六进制颜色码,方便Tkinter使用)
# 前5位基本号颜色:RGB(42,131,207) → 十六进制#2A83CF(蓝色)
front_color = "#2A83CF"
# 后2位特别号颜色:RGB(238,193,2) → 十六进制#EEC102(黄色)
back_color = "#EEC102"

# 让窗口进入消息循环,保持窗口显示(必须放在代码最后,否则窗口会一闪而过)
root.mainloop()
代码解释


import
:导入程序所需的库,
tkinter
用于构建界面,
random
用于生成随机号码,
messagebox
用于弹出提示框。

tk.Tk()
:创建主窗口对象,是所有界面元素的 “容器”。

title()
:设置窗口标题,显示在窗口顶部。

geometry()
:设置窗口初始大小,格式为 “宽 x 高”(单位:像素)。

resizable()
:控制窗口是否可缩放,两个参数分别对应水平和垂直方向。

configure(bg="")
:设置窗口背景色,这里使用浅灰色(#F5F5F5),十六进制颜色码可通过在线工具将 RGB 值转换得到。

group_count
:全局变量,用于统计已生成的号码组数,初始值为 0。

root.mainloop()
:启动窗口的消息循环,让窗口保持显示状态,此语句必须放在代码末尾。

运行测试

将上述代码复制到编辑器中,保存为
lottery.py
,运行后会弹出一个浅灰色背景的窗口,标题为 “大乐透号码生成器”,这说明基础窗口创建成功。

第三步:实现号码生成功能

编写生成大乐透号码的函数,大乐透规则为:前 5 位基本号从 1-35 中选不重复数字,后 2 位特别号从 1-12 中选不重复数字,所有号码按升序排列。
零基础入门使用 Python 实现大乐透号码生成器(Tkinter 可视化)

代码片段

# 定义生成号码的函数,函数名generate_numbers见名知义
def generate_numbers():
    # 声明使用全局变量group_count,否则函数内无法修改全局变量的值
    global group_count
    
    # 限制最多生成10组号码,若达到上限则弹出提示框并结束函数
    if group_count >= 10:
        messagebox.showinfo("提示", "最多生成10组号码!")  # 弹出提示对话框
        return  # 结束函数,不再执行后续代码
    
    # 生成前5位基本号(1-35,不重复,升序排列)
    front_numbers = []  # 用于存储前5位基本号的列表
    # 循环直到列表长度达到5(即收集到5个不重复数字)
    while len(front_numbers) < 5:
        num = random.randint(1, 35)  # 生成1-35之间的随机整数
        if num not in front_numbers:  # 判断数字是否已存在,避免重复
            front_numbers.append(num)  # 不存在则添加到列表中
    front_numbers.sort()  # 对列表中的数字进行升序排序
    
    # 生成后2位特别号(1-12,不重复,升序排列)
    back_numbers = []  # 用于存储后2位特别号的列表
    # 循环直到列表长度达到2(即收集到2个不重复数字)
    while len(back_numbers) < 2:
        num = random.randint(1, 12)  # 生成1-12之间的随机整数
        if num not in back_numbers:  # 判断数字是否已存在,避免重复
            back_numbers.append(num)  # 不存在则添加到列表中
    back_numbers.sort()  # 对列表中的数字进行升序排序
    
    # 号码组数加1(记录当前生成的是第几组)
    group_count += 1
    # 调用show_group函数,将生成的号码组(基本号+特别号)和组号传入,用于显示
    show_group(front_numbers + back_numbers, group_count)
代码解释


def generate_numbers():
:定义生成号码的函数,函数名遵循 “见名知义” 原则,方便理解功能。

global group_count
:声明使用全局变量,若不声明,函数内只能读取全局变量,无法修改其值。

messagebox.showinfo()
:弹出提示对话框,第一个参数是对话框标题,第二个参数是提示内容。

random.randint(a, b)
:生成 a 到 b 之间的随机整数(包含 a 和 b),用于生成号码。

while循环
:通过循环确保生成的号码不重复,直到列表长度达到要求(5 个基本号、2 个特别号)。

sort()
:对列表中的数字进行升序排序,符合大乐透号码的常规显示习惯。

front_numbers + back_numbers
:将基本号列表和特别号列表合并为一个完整的号码组列表。

show_group()
:后续将定义的函数,用于在界面上显示生成的号码组。

第四步:实现号码显示功能

编写函数将生成的号码显示在界面上,包括组号、蓝色圆圈的基本号、黄色圆圈的特别号。
零基础入门使用 Python 实现大乐透号码生成器(Tkinter 可视化)

代码片段

# 定义显示一组号码的函数,参数numbers为号码组列表,group_num为组号
def show_group(numbers, group_num):
    # 创建一个框架(Frame),用于容纳一组号码的所有元素,方便布局和区分不同组
    group_frame = tk.Frame(numbers_frame, bg="#F9F9F9", height=60)
    # 将框架添加到界面:fill=tk.X表示水平方向填充父容器,pady/padx控制上下/左右边距
    group_frame.pack(fill=tk.X, pady=6, padx=10)
    
    # 创建组号标签(如“第1组”),用于标识当前是第几组号码
    tk.Label(
        group_frame,  # 标签的父容器,即当前号码组的框架
        text=f"第{
     
     group_num}组",  # 标签显示的文字,使用f-string格式化组号
        font=("SimHei", 11, "bold"),  # 字体设置:黑体、11号字、加粗
        bg="#F9F9F9"  # 标签背景色,与父框架背景色一致,避免突兀
    ).pack(side
© 版权声明

相关文章

暂无评论

none
暂无评论...