Python作为一种流行的编程语言,以其简洁、易读和多功能而著称。我们完全可以使用Python来模拟彩票开奖或者彩票机选,通过使用Python的Tkinter库来设计一个彩票开奖或者机选软件,可以非常直观地实现一个用户友好的GUI图形界面。本节教程将介绍如何使用Tkinter库设计彩票开奖或者彩票机选软件。
1、彩票机选软件介绍
我们的目标是开发一个彩票开奖或者彩票机选软件,首先,创建一个图形界面,其中包括两个选择按钮,可以选择随机生成双色球号码,也可以选择随机生成大乐透号码。双色球是一种流行的彩票游戏,主要包含6个红球号码(范围1-33)和1个蓝球号码(范围1-16)。大乐透彩票游戏规则也比较简单,前区选取5个号码(范围1-35),后区选取2个号码(范围1-12)。
在彩票机选主界面,一次性可以生成多注机选结果,还可以点击“保存机选结果”按钮,将机选结果保存到本地的txt文件内。
2、彩票机选软件界面演示
3、代码实现
(1)导入必要的库
import tkinter as tk
from tkinter import scrolledtext, messagebox
import random
from tkinter import filedialog
这里导入了Tkinter库用于创建GUI应用图形界面,Tkinter的messagebox用于消息提示,scrolledtext是Tkinter库中专门用于创建带有滚动条的文本框控件,Tkinter的filedialog模块提供了一个简单的对话框界面,可以让用户选择文件或文件夹。
(2)彩票机选软件的完整代码如下所示:
动手练一练:
import tkinter as tk
from tkinter import scrolledtext, messagebox
import random
from tkinter import filedialog
# 双色球随机生成函数
def generate_lottery():
# 随机生成6个不重复的红球号码,范围从1到33
red = random.sample(range(1, 34), 6)
# 将6个数字升序排序
red.sort()
# 随机生成1个蓝球号码,范围从1到16
blue = random.choice(range(1, 17))
# 把6个红球号码和1个蓝球号码组成字符串
result = '红球:' + ' '.join(map(str, red)) + ' ' + '蓝球:' + str(blue)
return result
# 大乐透随机生成函数
def lottery_numbers():
# 前区随机生成5个不重复的数字,范围从1到35
front = random.sample(range(1, 36), 5)
# 将5个数字升序排序
front.sort()
# 后区随机生成2个不重复的数字,范围从1到12
back = random.sample(range(1, 13),2)
# 将2个数字升序排序
back.sort()
# 将前区5个数字和后区2个数字组成字符串
result = '前区:' + ' '.join(map(str, front)) + ' ' + '后区:' + ' '.join(map(str, back))
return result
# 获取随机生成的结果
def run():
# 获取选择框的值,双色球选择框的值为1,大乐透选择框的值为2
get_vselected = choose.get()
result1=""
# 获取“机选注数”输入框中的数字,确保输入为正整数
try:
if number_entry.get().strip() == '':
return messagebox.showerror('错误!', '请输入注数')
entry_value = int(number_entry.get())
if entry_value <= 0:
raise ValueError("必须是正整数")
for _ in range(entry_value):
# 判断选择框的值是1还是2
if get_vselected == 1:
result1=result1 +"\n" +generate_lottery()
else:
result1=result1 +"\n" +lottery_numbers()
except ValueError:
messagebox.showerror("输入错误", f"请输入一个有效的整数")
return
# 根据选择框输入的值,输出不同的结果
if get_vselected == 1:
result = f"双色球机选结果是:\n{result1}"
elif get_vselected == 2:
result = f"大乐透机选结果是:\n{result1}"
# 显示结果
result_text.config(state=tk.NORMAL) # 允许修改输出框
result_text.delete(1.0, tk.END) # 清空输出框
result_text.insert(tk.END, result) # 显示结果
result_text.config(state=tk.DISABLED) # 禁止修改输出框
# 保存机选结果到本地的txt文件内
def save_result():
# 创建一个文件对话框来选择文件保存的位置
save_path = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("Text files", "*.txt")])
if save_path:
# 获取ScrolledText的内容
content = result_text.get(1.0, tk.END)
# 写入文件
with open(save_path, "w") as file:
file.write(content)
# 创建“清除”函数
def clear_result():
# 允许修改输出框
result_text.config(state=tk.NORMAL)
# 定义清除文本的功能
result_text.delete(1.0, tk.END)
# 创建Tkinter窗口
app = tk.Tk()
app.title("彩票机选工具")
# 设置窗口居中
window_width = 400
window_height = 550
screen_width = app.winfo_screenwidth()
screen_height = app.winfo_screenheight()
x = (screen_width - window_width) / 2
y = (screen_height - window_height) / 2
app.geometry('%dx%d+%d+%d' % (window_width, window_height, x, y))
app.resizable(width=False, height=False)
# 创建选择框容器
choose_frame = tk.Frame(app)
choose_frame.pack(pady=5)
# 创建左右选择框,设置默认值为1
choose = tk.IntVar(value=1)
radio1 = tk.Radiobutton(choose_frame, text="双色球机选", variable=choose, value=1)
radio1.pack(padx=10, pady=10, side=tk.LEFT)
radio2 = tk.Radiobutton(choose_frame, text="大乐透机选", variable=choose, value=2)
radio2.pack(padx=10, pady=10, side=tk.RIGHT)
# 创建输入框容器
entry_frame = tk.Frame(app)
entry_frame.pack(pady=5)
# 创建机选注数输入框
entry_label = tk.Label(entry_frame, text="请输入机选的注数:")
entry_label.pack(padx=5, pady=10, side=tk.LEFT)
number_entry = tk.Entry(entry_frame)
number_entry.pack(padx=5, pady=10, side=tk.RIGHT)
# 创建确认按钮
confirm_button = tk.Button(app, text="确认", font=('黑体', 15), command=run, width=5, height=1)
confirm_button.pack(pady=20)
# 创建输出框
result_label = tk.Label(app, text="机选结果:")
result_label.pack(pady=5)
result_text = scrolledtext.ScrolledText(app, width=50, height=18, wrap=tk.WORD, state=tk.DISABLED)
result_text.pack(pady=5)
# 创建按钮容器
result_frame = tk.Frame(app)
result_frame.pack(pady=5)
# 左边创建一个按钮来触发“保存”操作
save_button = tk.Button(result_frame, text="保存机选结果", font=('黑体', 15), command=save_result)
save_button.pack(padx=10, pady=10, side=tk.LEFT)
# 右边创建“清除”按钮并绑定到clear_result函数
clear_button = tk.Button(result_frame, text="清除", font=('黑体', 15), command=clear_result)
clear_button.pack(padx=10, pady=10, side=tk.RIGHT)
# 当前模块直接被执行
if __name__ == '__main__':
# 开启主循环,让窗口处于显示状态
app.mainloop()