python 随机密码生成器

最近在研究PySimpleGUI库,把之前写的一个随机密码生成器改成GUI版本发出来,有兴趣的兄弟们可以拿走。
因为能力有限,目前只能写生成一个随机密码的Gui版本,等我学了更多的内容再慢慢完善。
核心代码很简单,界面也很粗陋。
如果你能写得更好,不要喷,直接回帖发出来让我参考下,谢谢。

代码:

from pyperclip import copy
import PySimpleGUI as sg
import random
import string
 
 
def get_passwords(xiaoxie=True,
                  daxie=True,
                  shuzi=True,
                  biaodian=True,
                  zidingyi='',
                  qianzhui='',
                  houzhui='',
                  paichu='',
                  pwd_len=11,
                  pwd_count=1):
    pwd_list = []
    if not any([xiaoxie, daxie, shuzi, biaodian]): return '至少要勾选一种密码类型!'
    words = zidingyi
    if xiaoxie: words += string.ascii_lowercase  #小写字母
    if daxie: words += string.ascii_uppercase  #大写字母
    if shuzi: words += string.digits  #数字
    if biaodian: words += string.punctuation  #标点
    #规避样本数量 < 密码长度的问题
    if len(words) <= pwd_len: words = words * (pwd_len // len(words) + 1)
 
    zhui_len = len(f'{qianzhui}{houzhui}')
    if pwd_len < zhui_len:
        return '密码长度<前后缀的长度之和!'.split() * 3
    for _ in range(pwd_count):
        chosen = ''.join(random.sample(words, pwd_len))  #生产随机列表
 
        chosen = f'{qianzhui}{chosen}{houzhui}'  #加前后缀
 
        if set(paichu):  #排除字符
            for i in set(paichu):
                chosen = chosen.replace(i, '')
 
        pwd_list.append(chosen.strip())  # 组成字符串
    return [
        f'{str(n).zfill(len(str(pwd_count)))}. {i}'
        for n, i in enumerate(pwd_list, 1)
    ]
 
 
def gui():  # sourcery skip: do-not-use-bare-except
    sg.theme('GrayGrayGray')  # 设置当前主题
    xuan_frame = [
        sg.Checkbox(
            '小写a-z',
            default=True,
            key='小写',
        ),
        sg.Checkbox(
            '大写A-Z',
            default=True,
            key='大写',
        ),
        sg.Checkbox(
            '数字0-9',
            default=True,
            key='数字',
        ),
        sg.Checkbox(
            '标点',
            default=True,
            key='标点',
        ),
    ],
 
    zidingyi_frame = [
        sg.Text('自定义字:'),
        sg.InputText(
            key='自定义',
            size=(10, 11),
        ),
        sg.Text(' 前缀:'),
        sg.InputText(
            key='前缀',
            size=(5, 11),
        ),
        sg.Text(' 后缀:'),
        sg.InputText(
            key='后缀',
            size=(5, 11),
        ),
    ],
 
    paichu_frame = [
        sg.Text('排除字符:'),
        sg.InputText(
            key='排除',
            size=(40, 11),
        ),
    ],
    chang_frame = [
        sg.Text('密码长度'),
        sg.Slider(
            range=(5, 55),
            default_value=6,
            orientation='horizontal',  #滑块方向
            tick_interval=10,  #显示的步长
            enable_events=True,
            key='长度',
            size=(41, 20))
    ],
    shu_frame = [
        sg.Text('密码个数'),
        sg.Slider(
            range=(5, 55),
            default_value=5,
            orientation='horizontal',  #滑块方向
            tick_interval=10,  #显示的步长
            enable_events=True,
            key='个数',
            size=(41, 20))
    ],
 
    layout = [[
        sg.Frame(
            '',
            xuan_frame,
            size=(400, 40),
            pad=(5),
        ),
    ], [
        sg.Frame(
            '',
            zidingyi_frame,
            size=(400, 40),
            pad=(5),
        ),
    ], [sg.Frame(
        '',
        paichu_frame,
        size=(400, 40),
        pad=(5),
    )], [sg.Frame(
        '',
        chang_frame,
        size=(400, 80),
        pad=(5),
    )], [sg.Frame(
        '',
        shu_frame,
        size=(400, 80),
        pad=(5),
    )],
              [
                  sg.Listbox([],
                             key='结果',
                             size=(57, 10),
                             horizontal_scroll=True,
                             highlight_background_color='gray',
                             font=('宋体', 10),
                             enable_events=True,
                             pad=(5, 10))
              ],
              [
                  sg.Button('清空', key='清空', pad=(10, 10), enable_events=True),
                  sg.Button(
                      '复制所有密码',
                      key='复制所有密码',
                      button_color='#118890',
                      enable_events=True,
                  ),
              ],
              [
                  sg.Text(
                      '取消或勾选密码类型后,要拖动滑块,才能重新生成',
                      text_color='#0000ff',
                      key='提示',
                      font=('宋体', 10),
                      justification='center',
                  )
              ]]
 
    # 创建展示窗口8
    window = sg.Window('随机密码.220921 - [url=mailto:wkdxz@52pojie.cn]wkdxz@52pojie.cn[/url]   ',
                       layout,
                       font=('微软雅黑', 10),
                       size=(400, 610),
                       element_justification='center')
 
    # 事件循环并获取输入值
    while True:
        event, values = window.read()
        if not event:
            break
        elif event != '复制所有密码':  #任何事件都会生成密码
            pwds = get_passwords(values['小写'], values['大写'], values['数字'],
                                 values['标点'], values['自定义'], values['前缀'],
                                 values['后缀'], values['排除'], int(values['长度']),
                                 int(values['个数']))
        # print(event, values)
        if event in ['个数', '长度']:
            window['结果'].update(pwds)
            window['提示'].update('点击单条密码,可复制到剪贴板')
 
        if event == '结果':
            try:
                pwd = values['结果'][0].split('.', 1)[1].strip()
                copy(pwd)
                window['提示'].update(f'已复制:\n{pwd}')
            except:
                window['提示'].update('取消或勾选密码类型后,要拖动滑块,才能重新生成')
 
        if event == '清空':
            window['长度'].update(0)
            window['个数'].update(0)
            window['结果'].update('')
            window['提示'].update('')
            window['自定义'].update('')
            window['前缀'].update('')
            window['后缀'].update('')
            window['排除'].update('')
 
        if event == '复制所有密码':
            try:
                passwords = [i.split('.', 1)[1].strip() for i in pwds]
                copy('\n'.join(passwords))
                window['提示'].update(f'【所有】密码({len(pwds)}条)已复制到剪贴板')
            except:
                window['提示'].update('取消或勾选密码类型后,要拖动滑块,才能重新生成')
    window.close()
 
 
if __name__ == '__main__':
    gui()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/145226.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023年华为杯数学建模E题——代码复盘(第一问)

2023年华为杯数学建模E题 代码复盘 写在最前面目录问题1a计算时间间隔思路说明代码输出结果 插值求解思路代码输出结果 绘图绘制3D图&#xff08;待修改&#xff09; 问题1b数据预处理思路代码 模型训练思路代码输出结果网格调参代码输出结果 写在最前面 超开心又有点遗憾 结果…

Vue3 watch监视和watchEffect函数

Vue3 中的watch使用效果和Vue2 中配置watch配置项的使用效果是一致的。 使用watch监视之前&#xff0c;需要先对watch进行引入。 import {watch} from vue; 一、监视一个ref对象 以下情况只适用于监视一个ref对象。 watch(监视对象, (newValue, oldValue) > { // 监视操作…

使用清华智谱ChatGLM2大模型搭建本地私有知识库

首先放上该方案项目的git地址&#xff1a;https://github.com/chatchat-space/Langchain-Chatchat 以下是我的搭建和踩坑经验记录 一、环境准备 1、python安装 在环境中安装python&#xff0c;我安装的是3.9版本的python&#xff0c;官方要求的是Python 3.8 - 3.10 版本。不知…

Java学习之路 —— Day1(环境配置、变量)

文章目录 前言1. 搭建Java开发环境1.1 下载java1.2 JDK组成1.3 使用idea开发 2. java基本语法2.1 变量类型2.2 Scanner输入2.3 随机数2.4 数组 前言 已经好久没有写博客了&#xff0c;打开这个网站有一种熟悉又陌生的感觉。 前段时间一直在准备秋招&#xff0c;现在也告一段落…

【C++代码】最接近的三数之和,括号生成,合并两个有序链表,合并 K 个升序链表

题目&#xff1a;最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀&#xff0c;返回空字符串 ""。 class Solution { public:string longestCommonPrefix(vector<string>& strs) {string res"";int index 0; f…

专题知识点-二叉树-(非常有意义的一篇文章)

这里写目录标题 二叉树的基础知识知识点一(二叉树性质 )树与二叉树的相互转换二叉树的遍历层次优先遍历树的深度和广度优先遍历中序线索二叉树二叉树相关遍历代码顺序存储和链式存储二叉树的遍历二叉树的相关例题左右两边表达式求值求树的深度找数找第k个数二叉树非递归遍历代码…

Swift 警惕“隐式异步(implicitly asynchronous)”方法的执行陷阱

概览 actor 是 Swift 5.5 中一个“不可思议”的新类型&#xff0c;可以把它看做成一个数据同步器。actor 中所有属性和方法都会被自动“串行”&#xff08;serializes&#xff09;访问和执行&#xff0c;从而有效避免了数据竞争的发生。 不过&#xff0c;在一些微妙的情境下使…

笔记51:循环神经网络入门

本地笔记地址&#xff1a;D:\work_file\DeepLearning_Learning\03_个人笔记\3.循环神经网络\循环神经网络 a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a

29.第三方登录

1►第三方登录 当今社会&#xff0c;微信登录、QQ登录、抖音登录等等三方登录已经层出不穷&#xff0c;学会三方登录势在必行。 微信登录要认证开发者&#xff0c;必须为企业&#xff0c;个人不行&#xff0c;而且还要交300块钱。 QQ登录也要申请、微博登录也要申请。 还好…

ppt画思路图 流程图 医学药学生画图素材

关注微信&#xff0c;回复: 素材 &#xff0c;即可领取

基于 React 的 HT for Web ,由厦门图扑团队开发和维护 - 用于 2D/3D 图形渲染和交互

本心、输入输出、结果 文章目录 基于 React 的 HT for Web &#xff0c;由厦门图扑团队开发和维护 - 用于 2D/3D 图形渲染和交互前言什么是 HT for WebHT for Web 的特点如何使用 HT for Web相关链接弘扬爱国精神 基于 React 的 HT for Web &#xff0c;由厦门图扑团队开发和维…

基于闪电搜索算法优化概率神经网络PNN的分类预测 - 附代码

基于闪电搜索算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于闪电搜索算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于闪电搜索优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

任意文件读取漏洞 (Arbitrary File Read/Download Vulnerability)

任意文件读取漏洞 文章目录 任意文件读取漏洞漏洞场景漏洞危害漏洞分类任意文件读取重要函数readfile()file_get_contents()fread()$_GET任意文件读取 任意文件下载html实现a标签PHP实现任意文件下载 任意⽂件读取攻防过滤../防守绕过 任意文件读取挖掘漏洞防御 ​ 一些网站的需…

十年测试告诉你35岁测试程序员,互联网技术岗,何去何从?

今年的就业情形&#xff0c;想必大家都深有感触。企业裁员&#xff0c;求职市场岗位大幅减少&#xff1b;薪资降低&#xff0c;岗位能力要求越来越高&#xff1b;好像一瞬间大家都从万米高空坠落&#xff0c;失重带来的眩晕和迷茫&#xff0c;让求职者和招聘企业都显得有点手忙…

路由器ipsec|vpn实验分析

AR1 和 AR2代表两个公司的出口&#xff0c;R2模拟互联&#xff0c;两个公司通信&#xff0c;通过ipsec vpn 加密隧道进行业务通信 切记&#xff1a;ipsec 路由器一定用AR系列&#xff0c;千万别用R&#xff0c;否则会给你惊喜 R2只有接口配ip&#xff0c;无任何配置&#xff…

【Err】jetBrains远程开发报错:Failed to exec spawn helper: pid: 18310, exit value: 1

最近双11阿里云打折&#xff0c;买了台服务器做了下远程开发环境&#xff0c;在IDEA远程开发时遇到了个问题&#xff0c;导致项目启动失败&#xff0c;报错如下&#xff1a; JetBrains远程开发报错 Failed to exec spawn helper: pid: 18310, exit value: 1 &#xff08;我改好…

解析SQL 获取表、字段及SQL查询参数

解析SQL 获取表、字段及SQL查询参数 1. 执行效果2. 使用2.1 引入依赖2.2 相关实体2.3 工具类 1. 执行效果 2. 使用 2.1 引入依赖 <!-- sql 解析处理--><dependency><groupId>com.github.jsqlparser</groupId><artifactId>jsqlparser</artifa…

Potrace:一个基于多边形的跟踪算法

Potrace算法通过几个步骤将位图转换为矢量轮廓。 第一步&#xff0c;将位图分解为若干条路径&#xff0c;在黑白区域间形成边界。 在第二步中&#xff0c;每条路径由一个最优多边形逼近。 在第三步中&#xff0c;每个多边形被转换成光滑的轮廓。 在可选的第四步中&#xff0c;通…

【管理运筹学】运筹学“背诵手册”(二) | 对偶理论与灵敏度分析

二、对偶理论与灵敏度分析 用矩阵形式表示原问题和对偶问题&#xff1a; max ⁡ z C X s . t . { A X ≤ b X ≥ 0 \max z\pmb{CX}\\ s.t.\begin{cases} \pmb{AX\leq b} \\ \pmb{X}\geq\pmb{0} \end{cases} maxzCXs.t.{AX≤bX≥0​ 其中 C ( c 1 , c 2 , ⋯ , c n ) , X (…

Java入门篇 之 继承

本篇碎碎念&#xff1a;最近的课程遇到瓶颈了&#xff0c;看的时候感觉自己会了&#xff0c;但是结束仔细一回顾还是一知半解&#xff0c;一点一点来吧&#xff0c;基础必须要打好(自己给自己好的心里暗示&#xff0c;结局一定是好的) 今日份励志文案:慢慢改变&#xff0c;慢慢…