(注:项目中的库均为python自带的,无需安装)
import tkinter as tk
from random import randint
from tkinter import ttk
from tkinter.messagebox import showerror as serr
from functools import partial
resizewinsFloat = 175 # 更改成你的电脑屏幕缩放率
#随机数生成器(抽签)函数
def randfunc():
global getRandList
getRandList = []
def getRand():
global getRandList
def rebd(h,event = None):
if h.cget("bg") == "lightgray":
h.config(bg = "#f0f0f0")
else:
h.config(bg = "lightgray")
tl.pack_forget()
ddl.pack_forget()
dl = []
try:
min = int(ne.get())
max = int(xe.get())
ran = int(rc.get())
fs = int(fe.get())
resizeDebugsValue = float(pe.get())
except ValueError as e:
serr(message = f"错误:请输入整数!\n{e}",title = "随机数生成器-错误",parent = rwin)
return
if ran > max - min:
serr(message = "当前输入将抽取所有序号,抽取无效!",title = "随机数生成器-错误",parent = rwin)
return
if ran >= 10000:
serr(message = "错误:\n随机次数太多,可能会导致程序崩溃,\n请降低随机次数到8000以下!",title = "时间显示-随机数生成器-Error")
return
for i in getRandList:
i.destroy()
if scv.get():rwin.update()
row = 0
column = 0
for i in range(ran):
while True:
r = randint(min,max)
if not ((r in dl) and dcv.get()):
break
if jcv.get():
rwin.update()
getRandList.append(tk.Label(grff,text = str(r),bd = 1,width = 10,relief = "groove",font = ("微软雅黑",fs,"bold")))
if row * (fs + 0.5) * resizewinsFloat / 100 * resizeDebugsValue > scrsize[1] * 0.5:
column += 1
row = 0
row += 1
getRandList[-1].grid(row = row,column = column,padx = 1,pady = 1,ipadx = 7)
getRandList[-1].bind("<Button-1>",partial(rebd,getRandList[-1]))
dl.append(r)
tl.pack(side = "left")
def resetvl():
ne.delete(0,tk.END)
xe.delete(0,tk.END)
fe.delete(0,tk.END)
pe.delete(0,tk.END)
rc.delete(0,tk.END)
dcv.set(1)
jcv.set(1)
scv.set(0)
ne.insert(0,"1")
xe.insert(0,"41")
fe.insert(0,"15")
pe.insert(0,"1.3")
rc["value"] = ()
for i in range(1,41):
rc["value"] = (*rc["value"],i)
rc.insert(0,"3")
rwin.update()
def resetCombobox():
try:
min = int(ne.get())
max = int(xe.get())
except:
isresetCombobox = False
return
rc["value"] = (list(range(min,max)))
rwin.after(100,resetCombobox)
def resetmod():
if nb.cget("text") == "基本设置":
nb.config(text = "全部设置")
fl.config(state = tk.DISABLED)
pl.config(state = tk.DISABLED)
fe.config(state = tk.DISABLED)
pe.config(state = tk.DISABLED)
jc.config(state = tk.DISABLED)
sc.config(state = tk.DISABLED)
dc.config(state = tk.DISABLED)
else:
nb.config(text = "基本设置")
fl.config(state = tk.NORMAL)
pl.config(state = tk.NORMAL)
fe.config(state = tk.NORMAL)
pe.config(state = tk.NORMAL)
jc.config(state = tk.NORMAL)
sc.config(state = tk.NORMAL)
dc.config(state = tk.NORMAL)
#绘制窗口
rwin = tk.Tk()
rwin.iconbitmap("./icon.ico")
#rwin.resizable(0,0)
scrsize = (rwin.winfo_screenwidth(),rwin.winfo_screenheight())
rwin.maxsize(9999999,9999999)
rwin.title("时间显示-随机数生成器GUI")
vlf = ttk.Labelframe(rwin,text = "参数")
grf = ttk.Labelframe(rwin,text = "结果")
nl = ttk.Label(vlf,text = "最小值")
ne = ttk.Entry(vlf,width = 15)
xl = ttk.Label(vlf,text = "最大值")
xe = ttk.Entry(vlf,width = 15)
fl = ttk.Label(vlf,text = "字体大小")
fe = ttk.Entry(vlf,width = 15)
pl = ttk.Label(vlf,text = "缩放因子")
pe = ttk.Entry(vlf,width = 15)
nb = ttk.Button(vlf,text = "全部设置",command = resetmod)
jcv = tk.IntVar()
scv = tk.IntVar()
jcv.set(1)
scv.set(0)
jc = ttk.Checkbutton(vlf,text = "加载时刷新屏幕",variable = jcv)
sc = ttk.Checkbutton(vlf,text = "删除时刷新屏幕",variable = scv)
rl = ttk.Label(vlf,text = "随机次数")
rc = ttk.Combobox(vlf,width = 12)
dcv = tk.IntVar()
dcv.set(1)
dc = ttk.Checkbutton(vlf,text = "随机次数内保证不重复",variable = dcv,onvalue = 1,offvalue = 0)
rb = ttk.Button(vlf,text = "获取随机数",command = getRand)
gb = ttk.Button(vlf,text = "恢复默认值",command = resetvl)
tl = tk.Label(grf,text = "点击即可标记",fg = "gray")
ddl = tk.Label(grf,text = '点击"获取随机数"生成随机数',fg = "gray")
grff = ttk.Frame(grf)
ne.insert(0,"1")
xe.insert(0,"41")
fe.insert(0,"15")
pe.insert(0,"1.3")
rc["value"] = ()
for i in range(1,41):
rc["value"] = (*rc["value"],i)
rc.insert(0,"3")
vlf.pack(padx = 3,pady = 3,fill = "x")
grf.pack(padx = 3,pady = 3,fill = "x")
nl.grid(row = 0,column = 0,padx = 3,pady = 3)
ne.grid(row = 0,column = 1,padx = 3,pady = 3)
xl.grid(row = 0,column = 2,padx = 3,pady = 3)
xe.grid(row = 0,column = 3,padx = 3,pady = 3)
fl.grid(row = 1,column = 0,padx = 3,pady = 3)
fe.grid(row = 1,column = 1,padx = 3,pady = 3)
rl.grid(row = 1,column = 2,padx = 3,pady = 3)
rc.grid(row = 1,column = 3,padx = 3,pady = 3)
pl.grid(row = 2,column = 0,padx = 3,pady = 3)
pe.grid(row = 2,column = 1,padx = 3,pady = 3)
nb.grid(row = 2,column = 2,padx = 3,pady = 3,columnspan = 2,sticky = "nesw")
dc.grid(row = 0,column = 4,padx = 3,pady = 3,columnspan = 2,sticky = "w")
jc.grid(row = 1,column = 4,padx = 3,pady = 3,columnspan = 2,sticky = "w")
sc.grid(row = 2,column = 4,padx = 3,pady = 3,columnspan = 2,sticky = "w")
rb.grid(row = 3,column = 0,padx = 3,pady = 3,columnspan = 2,sticky = "nesw")
gb.grid(row = 3,column = 2,padx = 3,pady = 3,columnspan = 2,sticky = "nesw")
grff.pack(fill = "both")
ddl.pack(side = "left")
resetCombobox()
fl.config(state = tk.DISABLED)
pl.config(state = tk.DISABLED)
fe.config(state = tk.DISABLED)
pe.config(state = tk.DISABLED)
jc.config(state = tk.DISABLED)
sc.config(state = tk.DISABLED)
dc.config(state = tk.DISABLED)
rwin.mainloop()
randfunc()
如果有任何疑问或发现错误,欢迎在评论区留言指出。感谢您的反馈,这对提高代码质量和我的写作水平非常有帮助。期待您的宝贵意见和建议!