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()