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

前置准备
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()
:设置窗口初始大小,格式为 “宽 x 高”(单位:像素)。
geometry()
:控制窗口是否可缩放,两个参数分别对应水平和垂直方向。
resizable()
:设置窗口背景色,这里使用浅灰色(#F5F5F5),十六进制颜色码可通过在线工具将 RGB 值转换得到。
configure(bg="")
:全局变量,用于统计已生成的号码组数,初始值为 0。
group_count
:启动窗口的消息循环,让窗口保持显示状态,此语句必须放在代码末尾。
root.mainloop()
运行测试
将上述代码复制到编辑器中,保存为,运行后会弹出一个浅灰色背景的窗口,标题为 “大乐透号码生成器”,这说明基础窗口创建成功。
lottery.py
第三步:实现号码生成功能
编写生成大乐透号码的函数,大乐透规则为:前 5 位基本号从 1-35 中选不重复数字,后 2 位特别号从 1-12 中选不重复数字,所有号码按升序排列。

代码片段
# 定义生成号码的函数,函数名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()
:生成 a 到 b 之间的随机整数(包含 a 和 b),用于生成号码。
random.randint(a, b)
:通过循环确保生成的号码不重复,直到列表长度达到要求(5 个基本号、2 个特别号)。
while循环
:对列表中的数字进行升序排序,符合大乐透号码的常规显示习惯。
sort()
:将基本号列表和特别号列表合并为一个完整的号码组列表。
front_numbers + back_numbers
:后续将定义的函数,用于在界面上显示生成的号码组。
show_group()
第四步:实现号码显示功能
编写函数将生成的号码显示在界面上,包括组号、蓝色圆圈的基本号、黄色圆圈的特别号。

代码片段
# 定义显示一组号码的函数,参数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
