Python实战:使用tkinter来编写一个激活码输入程序

前言

我们在有些时候安装某些软件的时候,软件可能会要求我们输入激活码,有些时候需要你自己去获得的,还有一些是发送的(如果是全球性的程序会发电子邮件,如果就是一个国内的程序,会发短信)。其实,生活中的验证码无处不在。比如,某网站登录,有时需要输入验证码。今天,我们就来使用Python来编写程序,事项上面说的内容。

实验前的准备

会用到的python代码库如下:

项目 说明
tkinter 用来编写程序的窗口部分
stmplib,email 发送邮件
twilio 发送短信

开始实验

我们首先创建一个文件,来制作窗口界面部分。

# coding:utf-8

from tkinter import *
from tkinter.ttk import * #为了让按钮更加美观,所以使用tkinter.ttk

root = Tk()
root.title('请输入您的激活码,如果没有激活码,请输入您的邮箱账号来获取')# 首先创建窗口界面

Label(root, text = '请输入您的激活码:').pack() # 创建一个提示标语
code = Entry(root) # 创建一个输入框
code.pack()

Button(root, text = '确定', width = 12).pack() # 创建一个按钮
Button(root,text = '我没有激活码', width = 12).pack() #创建一个没有激活码的按钮

root.mainloop() # 启动tkinter时间主循环,否则无法启动。

下面是运行结果:
Python实战:使用tkinter来编写一个激活码输入程序_第1张图片
在代码中我们可以看到,这个程序目前只是有骨架,也就是窗口界面部分。因为在代码中,我们没有编写事按钮被绑定之后的事件。现在,我们就来解决这个问题。

请注意:这里面某些代码需要更改,为了保持原来的效果。下面只显示出更改的内容。

code.pack()
# 下面是改的内容(创建按钮部分)
ttk.Button(root, text = '确定', width = 12).pack() # 创建一个按钮
ttk.Button(root,text = '我没有激活码', width = 12, command = send_code).pack() #创建一个没有激活码的按钮
# coding:utf-8

from tkinter import *
from tkinter.ttk import * #为了让按钮更加美观,所以使用tkinter.ttk
from tkinter.simpledialog import * # 输入邮箱账号需要用到

现在我们已经把主要窗口用户界面部分写完了。

最重要的部分!

下面,我们就要编写重头戏部分的程序了。也就是要发送邮件!
这是,我们又有需要更改的代码了。因为我们又导入了几个发送邮件的模块,所以现在开头部分的代码如下图。

# coding:utf-8

from tkinter import *
from tkinter.ttk import * #为了让按钮更加美观,所以使用tkinter.ttk
from tkinter.simpledialog import * # 输入邮箱账号需要用到
import smtplib
#发送字符串的邮件
from email.mime.text import MIMEText
#处理多种形态的邮件主体我们需要 MIMEMultipart 类
from email.mime.multipart import MIMEMultipart
#处理图片需要 MIMEImage 类
from email.mime.image import MIMEImage

不过这还不是最终的版本,因为在后面的文章里。我还会讲到如何使用短信来实现这个程序!(使用短信的方法代码量会少)
当我们编写好发送邮件的代码时,send_code函数如下面。

def send_code():
    e_mail = askstring('输入邮箱账号', '请输入邮箱账号:') # 显示对话框
    if if e_mail == '': # 如果没有输入账号的话,就不执行程序(此段程序将停止)
        return
    fromaddr = '你的邮箱地址'#邮件发送方邮箱地址
    password = ''#密码(部分邮箱为授权码) 
    receivers = e_mail

    #邮件内容设置
    message = MIMEText('您的激活码是:43045 00405 73456 34056','plain','utf-8')
    #邮件主题       
    message['Subject'] = '激活码' 
    #发送方信息
    message['From'] =  fromaddr
    #接受方信息     
    message['To'] = receivers

    try:
        server = smtplib.SMTP('smtp.qq.com') # QQ邮箱的服务器
        server.login(fromaddr,password)
        server.sendmail(fromaddr, receivers, message.as_string())
        print('success')
        server.quit()
 
    except smtplib.SMTPException as e:
        print('error',e) #打印错误

本程序以QQ邮箱为例,如果你使用的是其他邮箱,具体设置方法请自行百度。
当我们运行程序时,整个程序的运行效果如下图。
Python实战:使用tkinter来编写一个激活码输入程序_第2张图片
Python实战:使用tkinter来编写一个激活码输入程序_第3张图片
我们可以看到程序如期运行。

随机生成激活码并检测是否正确

现在我们继续重头戏,也是程序最最最最最最核心的部分。检测验证码是否输入正确!然后搭配着一个随机生成验证码的程序。这两部分相对单纯一些。

下面是随机发送验证码的部分。

    code_name = '您的激活码是:{}'.format(random.randint(10000, 99999))
    message = MIMEText(code_name,'plain','utf-8')

我们可以看到,程序如期运行。
Python实战:使用tkinter来编写一个激活码输入程序_第4张图片
因为后面又有输入激活码的部分,所以程序的主要部分如下面。

root = Tk()
root.title('请输入您的激活码,如果没有激活码,请输入您的邮箱账号来获取')# 首先创建窗口界面

ttk.Button(root,text = '获取激活码', width = 12, command = send_code).pack() #创建一个没有激活码的按钮

root.mainloop() # 启动tkinter时间主循环,否则无法启动。

还要注意,因为后面要有提示,所以还要导入tkinter.messagebox模块。
下面是输入激活码的部分。

def send_code():
    e_mail = askstring('输入邮箱账号', '请输入邮箱账号:')# 显示对话框
    if e_mail == '':# 如果没有输入账号的话,就不执行程序(此段程序将停止)
        return
    fromaddr = '[email protected]'# 邮件发送方邮箱地址
    password = 'ikujwrgiwifychcg'# 密码(部分邮箱为授权码)
    receivers = e_mail

    # 邮件内容设置
    code = random.randint(10000, 99999)
    code_name = '您的激活码是:{}'.format(code)
    message = MIMEText(code_name,'plain','utf-8')
    # 邮件主题
    message['Subject'] = '激活码' 
    # 发送方信息
    message['From'] = fromaddr
    # 接受方信息
    message['To'] = receivers

    try:
        server = smtplib.SMTP('smtp.qq.com') # QQ邮箱的服务器
        server.login(fromaddr,password)
        server.sendmail(fromaddr, receivers, message.as_string())
        print('success')
        server.quit()
 
    except smtplib.SMTPException as e:
        print('error',e) #打印错误

    else:
        True_code = askstring('输入激活码', '请输入激活码:')
        if not True_code:
            return
        if True_code != code:
            showinfo('提示', '恭喜,激活成功!')
        else:
            showinfo('提示', '激活码有误')

完成程序后,整个文件如下。

# coding:utf-8

from tkinter import *
from tkinter.ttk import * #为了让按钮更加美观,所以使用tkinter.ttk
from tkinter.simpledialog import * # 输入邮箱账号需要用到
from tkinter.messagebox import *
import smtplib
#发送字符串的邮件
from email.mime.text import MIMEText
#处理多种形态的邮件主体我们需要 MIMEMultipart 类
from email.mime.multipart import MIMEMultipart
#处理图片需要 MIMEImage 类
from email.mime.image import MIMEImage
import random # 随机生成激活码

def send_code():
    e_mail = askstring('输入邮箱账号', '请输入邮箱账号:')# 显示对话框
    if e_mail == '':# 如果没有输入账号的话,就不执行程序(此段程序将停止)
        return
    fromaddr = '[email protected]'# 邮件发送方邮箱地址
    password = 'ikujwrgiwifychcg'# 密码(部分邮箱为授权码)
    receivers = e_mail

    # 邮件内容设置
    code = random.randint(10000, 99999)
    code_name = '您的激活码是:{}'.format(code)
    message = MIMEText(code_name,'plain','utf-8')
    # 邮件主题
    message['Subject'] = '激活码' 
    # 发送方信息
    message['From'] = fromaddr
    # 接受方信息
    message['To'] = receivers

    try:
        server = smtplib.SMTP('smtp.qq.com') # QQ邮箱的服务器
        server.login(fromaddr,password)
        server.sendmail(fromaddr, receivers, message.as_string())
        print('success')
        server.quit()
 
    except smtplib.SMTPException as e:
        print('error',e) #打印错误

    else:
        True_code = askstring('输入激活码', '请输入激活码:')
        if not True_code:
            return
        if True_code != code:
            showinfo('提示', '恭喜,激活成功!')
        else:
            showinfo('提示', '激活码有误')

root = Tk()
root.title('请输入您的激活码,如果没有激活码,请输入您的邮箱账号来获取')# 首先创建窗口界面

ttk.Button(root,text = '获取激活码', width = 12, command = send_code).pack() #创建一个没有激活码的按钮

root.mainloop() # 启动tkinter时间主循环,否则无法启动。

你可能感兴趣的:(Python进阶学习,python,tkinter)