python学习-tkinter库创建一个彩票随机生成界面

tkinter 是 Python 的标准 GUI(图形用户界面)库,提供了一种简单的方式来创建图形界面应用程序。
tkinter 中的常用控件包括:

Label:用于显示文本或图像。
Button:按钮,用户可以点击。
Entry:单行文本框,用户可以输入文本。
Text:多行文本框,可用于输入或显示文本。
Frame:容器,用于组织其他控件。 Checkbutton:复选框,允许用户选择多个选项。
Radiobutton:单选框,用户只能选择一个选项。
Listbox:列表框,显示多个可供选择的选项。
Canvas:画布,可以用来绘制图形。

下面是代码部分

import tkinter as tk
import random
from tkinter import messagebox



def generate_ssq_numbers():
    # 从1到33中随机选择6个不重复的数字
    first_set = random.sample(range(1, 34), 6)

    # 将6个数字升序排序
    first_set.sort()

    # 从1到16中随机选择1个数字
    second_set = random.choice(range(1, 17))

    # 将6个数字和1个数字组成字符串,并通过'+'连接
    result = ' '.join(map(str, first_set)) + '+' + str(second_set)

    return result

def generate_dlt_numbers():
    # 从1到35中随机选择5个不重复的数字
    first_set = random.sample(range(1, 36), 5)

    # 将5个数字升序排序
    first_set.sort()

    # 从1到12中随机选择2个数字
    second_set = random.sample(range(1, 13),2)

    # 将2个数字升序排序
    second_set.sort()

    # 将5个数字和2个数字组成字符串,并通过'+'连接
    result = ' '.join(map(str, first_set)) + '+' + ' '.join(map(str, second_set))

    return result


# 执行的核心功能
def execute_action():
    # 获取选择框的值 (1 或 2)
    selected_value = var.get()
    result1=""
    # 获取输入框中的数字,确保输入为正整数
    try:
        input_value = int(entry.get())
        if input_value <= 0:
            raise ValueError("必须是正整数")
        for _ in range(input_value):
            # 判断输入的值是1还是2
            if selected_value == 1:
                result1=result1 +"\n" +generate_ssq_numbers()
            else:
                result1=result1 +"\n" +generate_dlt_numbers()
    except ValueError as e:
        messagebox.showerror("输入错误", f"请输入一个正整数:{e}")
        return


    # 根据选择的值进行不同的操作
    if selected_value == 1:
        result = f"结果是:\n {result1}"
    elif selected_value == 2:
        result = f"结果是:\n {result1}"

    # 显示结果
    output_text.config(state=tk.NORMAL)  # 允许修改输出框
    output_text.delete(1.0, tk.END)  # 清空输出框
    output_text.insert(tk.END, result)  # 显示结果
    output_text.config(state=tk.DISABLED)  # 禁止修改输出框

# 创建主窗口
root = tk.Tk()
root.title("暴富")

# 设置窗口大小
root.geometry("400x500")

# 创建选择框
var = tk.IntVar(value=1)  # 默认选择 1

radio1 = tk.Radiobutton(root, text="选择 双色球", variable=var, value=1)
radio1.pack(pady=10)

radio2 = tk.Radiobutton(root, text="选择 大乐透", variable=var, value=2)
radio2.pack(pady=10)

# 创建输入框
entry_label = tk.Label(root, text="请输入随机的注数:")
entry_label.pack(pady=5)

entry = tk.Entry(root)
entry.pack(pady=5)

# 创建确认按钮
confirm_button = tk.Button(root, text="确认", command=execute_action)
confirm_button.pack(pady=20)

# 创建输出框
output_label = tk.Label(root, text="输出结果:")
output_label.pack(pady=5)

output_text = tk.Text(root, height=10, width=50, wrap=tk.WORD, state=tk.DISABLED)
output_text.pack(pady=5)

# 启动主事件循环
root.mainloop()

在这里插入图片描述
增加一个号码校验是否中奖的界面
代码如下

import tkinter as tk
import random
from tkinter import messagebox

def compare_numbers(data1, data2):
    # 解析两个字符串数据,分割成前区和后区
    def parse_data(data):
        front, back = data.split(" + ")
        front = set(map(int, front.split()))
        back = set(map(int, back.split()))
        return front, back

    # 解析输入数据
    front1, back1 = parse_data(data1)
    front2, back2 = parse_data(data2)

    # 计算前区重复个数
    front_repeat = len(front1 & front2)
    # 计算后区重复个数
    back_repeat = len(back1 & back2)

    return f"{front_repeat}+{back_repeat}"
#判断奖项
def check_dlt_award(result):
    # 定义可能的情况和对应的奖项
    awards = {
        "5+2": "一等奖,奖金1000万元",
        "5+1": "二等奖,奖金50万元",
        "5+0": "三等奖,奖金10000元",
        "4+2": "四等奖,奖金3000元",
        "4+1": "五等奖,奖金300元",
        "3+2": "六等奖,奖金200元",
        "4+0": "七等奖,奖金100元",
        "3+1": "八等奖,奖金15元",
        "3+0": "九等奖,奖金5元",
        "2+2": "八等奖,奖金15元",
        "2+1": "九等奖,奖金5元",
        "1+2": "九等奖,奖金5元",
        "0+2": "九等奖,奖金5元"
    }

    # 如果结果在字典中,返回对应的奖项,否则返回 "其它"
    return awards.get(result, "未中奖")


def check_ssq_award(result):
    # 定义可能的情况和对应的奖项
    awards = {
        "6+1": "一等奖,奖金500万元",
        "6+0": "二等奖,奖金30万元",
        "5+1": "三等奖,奖金3000元",
        "5+0": "四等奖,奖金200元",
        "4+1": "四等奖,奖金200元",
        "4+0": "五等奖,奖金10元",
        "3+1": "五等奖,奖金10元",
        "2+1": "六等奖,奖金5元",
        "1+1": "六等奖,奖金5元",
        "0+1": "六等奖,奖金5元"
    }

    # 如果结果在字典中,返回对应的奖项,否则返回 "其它"
    return awards.get(result, "未中奖")

# 执行的核心功能
def execute_action():
    # 获取选择框的值 (1 或 2)
    selected_value = var.get()
    result=""
    #获取输入框中的字符串
    win_numbers=entry.get()
    your_numbers=entry1.get()

    # 判断输入的值是1还是2
    if selected_value == 1:
        result =  check_ssq_award(compare_numbers(win_numbers,your_numbers))
    else:
        result =  check_dlt_award(compare_numbers(win_numbers,your_numbers))

    # 显示结果
    output_text.config(state=tk.NORMAL)  # 允许修改输出框
    output_text.delete(1.0, tk.END)  # 清空输出框
    output_text.insert(tk.END, result)  # 显示结果
    output_text.config(state=tk.DISABLED)  # 禁止修改输出框

def on_focus_in(event):
    if entry.get() == "1 7 8 17 20 22 + 6":
        entry.delete(0, tk.END)  # 删除提示词
        entry.config(fg="black")  # 设置文字颜色为黑色

def on_focus_out(event):
    if entry.get() == "":
        entry.insert(0, "1 7 8 17 20 22 + 6")  # 设置默认提示词
        entry.config(fg="gray")  # 设置提示词颜色为灰色
# 创建主窗口
root = tk.Tk()
root.title("中大奖")

# 设置窗口大小
root.geometry("300x400")

# 创建选择框
var = tk.IntVar(value=1)  # 默认选择 1

radio1 = tk.Radiobutton(root, text="选择 双色球", variable=var, value=1)
radio1.pack(pady=10)

radio2 = tk.Radiobutton(root, text="选择 大乐透", variable=var, value=2)
radio2.pack(pady=10)

# 创建输入框
entry_label = tk.Label(root, text="请输入本期中奖号码:")
entry_label.pack(pady=5)

entry = tk.Entry(root, fg="gray", font=("Arial", 9))
entry.insert(0, "1 7 8 17 20 22 + 6")  # 设置提示词
entry.bind("<FocusIn>", on_focus_in)  # 绑定获得焦点事件
entry.bind("<FocusOut>", on_focus_out)  # 绑定失去焦点事件
entry.pack(pady=5)

# 创建输入框
entry_label1 = tk.Label(root, text="请输入本期购买号码:")
entry_label1.pack(pady=5)

entry1 = tk.Entry(root)
entry1.pack(pady=5)

# 创建确认按钮
confirm_button = tk.Button(root, text="确认", command=execute_action)
confirm_button.pack(pady=20)

# 创建输出框
output_label = tk.Label(root, text="输出结果:")
output_label.pack(pady=5)

output_text = tk.Text(root, height=10, width=50, wrap=tk.WORD, state=tk.DISABLED)
output_text.pack(pady=5)

# 启动主事件循环
root.mainloop()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值