原创

Python3 初学实践案例(7)tkinter 入门 GUI 的密码生成程序

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://fungleo.blog.csdn.net/article/details/78843387

Python3 初学实践案例(7)tkinter 入门 GUI 的密码生成程序

前面我已经非常好的完成了 cli 的密码生成程序的编写 http://blog.csdn.net/fungleo/article/details/78842597

虽然这个脚本已经非常理想了,但是对于大多数人来说,还是用不上的。毕竟,我不能要求所有人都去使用命令行。所以我决定写一个 gui 的图形界面的程序。

说起来简单,但做起来就太难了。我没有任何编写图形界面程序的经验,通过几天的研究,终于实现了部分功能:

最终效果

tkinter 实现完成代码

这真是个垃圾玩意儿,我决定放弃这个东西了。接下来没想好到底学习哪个库,估计在 wxpython 或者 pyqt 里面选择一个。但目前没有确定。

先来说说 tkinter 这个东西吧。这个是 python 自带的 gui 的库。它的说明文档非常糟糕,我勉强写下了下面的程序:

from tkinter import *
import sys
import clipboard
import random

def cutLength(leng, level):
    res = []
    for i in range(level, 1, -1):
        res.append(random.randint(1, leng - sum(res) - i + 1))
    res.append(leng - sum(res))
    random.shuffle(res)
    return res

def makePassword(dists, arr):
    res = []
    for i in range(len(arr)):
        for j in range(arr[i]):
            res += random.choice(dists[i])
    random.shuffle(res)
    return ''.join(res)

def getPassword(leng, level):
    arr = cutLength(leng,level)
    str1 = '01'
    str2 = '23456789'
    str3 = 'abcdefghijkmnpqrstuvwxyz'
    str4 = 'ABCDEFGHJKMNPQRSTUVWXYZ'
    str5 = '_@!,.:;-=+/?'

    dists = {
        1: [str1 + str2],
        3: [str2, str3, str4],
        4: [str2, str3, str4, str5]
    }
    return makePassword(dists[level], arr)

def test(res):
    if res.isdigit():
        return int(res) > 4
    else:
        return False

def calcPlus():
    leng.set(int(leng.get()) + 1)

def calcSubt():
    lengVal = int(leng.get())
    if lengVal > 4:
        leng.set(lengVal - 1)

def getPw():
    res = getPassword(int(leng.get()),level.get())
    clipboard.copy(res)
    pw.set(res)

if __name__ == "__main__":
    root = Tk()
    root.title('密码生成器')
    leng = StringVar()
    leng.set(8)

    f1 = Frame(root)
    f1.pack(padx=10,pady=5)

    testCMD = root.register(test)

    Label(f1, text="密码长度:").grid(row=0,column=0)

    f1r = Frame(f1)
    f1r.grid(row=0, column=1)

    e1 = Entry(f1r, textvariable=leng, width=5, validate="key",validatecommand=(testCMD, '%P')).grid(row=0,column=1)


    Button(f1r, text="+", command=calcPlus).grid(row=0, column=2)
    Button(f1r, text="-", command=calcSubt).grid(row=0, column=3)

    level = IntVar()
    level.set(3)

    Label(f1, text="密码强度:").grid(row=1,column=0)

    f1rb = Frame(f1)
    f1rb.grid(row=1, column=1)

    Radiobutton(f1rb, text="简单", variable=level, value=1).grid(row=1, column=1)
    Radiobutton(f1rb, text="一般", variable=level, value=3).grid(row=1, column=2)
    Radiobutton(f1rb, text="复杂", variable=level, value=4).grid(row=1, column=3)

    pw = StringVar()
    Entry(root,textvariable=pw,state="readonly").pack()

    submit = Button(root,text="生成密码并复制到剪切板", command=getPw)
    submit.pack()

    mainloop()

补充说明

首先我们创建了一个最简单的图形界面的程序

# 引入库
from tkinter import *
# 创建一个实例
root = Tk()
# 主循环进程
mainloop()

然后我们在命令行中输入命令 pyhton3 xxx.py 就可以跑起来一个图形界面的程序了。

默认是没有任何东西的。我们可以往里面去添加东西。就是不断的往 root 下面添加东西。

首先呢,我们可以设置一下程序的标题:

root.title('密码生成器')

然后,在里面可以添加框架,框架里面添加文本框,文字,按钮这些东西。

基础使用请看下我上面的代码吧。都是非常基础的知识。主要是文档太烂了,我不准备再继续研究了,太累了。

仅以此文纪念我的第一个GUI程序~

本文由 FungLeo 原创,允许转载,但转载必须保留首发链接。

文章最后发布于: 2017-12-19 15:39:52
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览