python简易随机数生成器(tkinter)

 (注:项目中的库均为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()

如果有任何疑问或发现错误,欢迎在评论区留言指出。感谢您的反馈,这对提高代码质量和我的写作水平非常有帮助。期待您的宝贵意见和建议!

  • 13
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值