零基础学编程036:快速编写一个GUI程序
在《零基础学编程035:群发邮件并不难》里,我们学会了发邮件,我用于向shenlongbin@sync.omnigroup.com发送一封邮件,就可以实现GTD的快速收集。
写程序没有GUI界面,好像显得不专业。什么是GUI?当然是指图形用户界面了,黑客们都用黑窗口Console+键盘,很少用鼠标,而给普通用户们还得用方便友好的窗口界面。
话说HTML浏览器的盛行,让桌面端的应用越来越少,以前编写复杂的用户界面程序的本领,当今则变得无用武之地。Python中的用户界面程序体系也是相当的复杂,今天来个简单可上手的,它就是guidata。
安装
如果你安装的是WinPython,则系统中已经包含了guidata模块包。如果没有安装也不要紧,正好可以复习《零基础学编程027:站在巨人的肩膀上》这一节,一行命令搞定:
python -m pip install guidata
快速上手
先从guidata的官方说明手册中抄来一段代码,修改一下:
import guidata
_app = guidata.qapplication()
import guidata.dataset.datatypes as dt
import guidata.dataset.dataitems as di
class MailData(dt.DataSet) :
""" 准备发邮件 """
subject = di.StringItem("邮件标题")
content = di.TextItem("邮件内容")
mail = MailData()
mail.edit()
print(mail.subject)
print(mail.content)
运行后,应该能够出现一个Windows程序,是不是很神奇?
在单行文本框、多行文本框中随便输入些文字,点击OK按钮后,看看Python的IDLE控制台输出什么?
详细说明
_app = guidata.qapplication()
这行代码建立一个GUI应用的实例,搞不清说的啥?实际内部的细节也不用管了,guidata背后依赖Qt,Qt又是啥?Qt是一款跨平台的图形界面开发框架。框架又是啥?先不谈框架了,程序员们的术语就是多。图形界面程序背后要完成许多许多的初始化事情,这行代码能把这些事情都准备好。
class MailData(dt.DataSet) :
在《零基础学编程028:面向对象编程OOP》里介绍过类class,这里利用dt.DataSet建立了一个子类MailData,子类会继承父类的所有特性,很多内部如何实现的细节也不用考虑了。
""" 准备发邮件 """
这是Python中的多行字符串,用来说明类的用途,在类定义或函数定义之后写上这条语句是个良好的习惯,将来这行语句还可以生成代码的使用说明文档。
subject = di.StringItem("邮件标题")
content = di.TextItem("邮件内容")
这两行负责获取一个单行的字符串到subject中,并把多行的文本保存在content变量中,内部细节也不用管。复习一下面向对象编程OOP的概念,这两个变量应该叫做成员变量。
mail = MailData()
声明一个对象实例mail,一个类class可以产生多个实例instance。
mail.edit()
此时会出现Windows GUI界面窗口,你输入的任何内容,在点击OK按钮后,会自动赋值给subject和content那两个变量中。
最后的程序
合并《零基础学编程035:群发邮件并不难》上一节的代码,我们就可以做一个带用户界面的向指定邮箱发送邮件的小程序了。
import guidata
_app = guidata.qapplication()
import guidata.dataset.datatypes as dt
import guidata.dataset.dataitems as di
class MailData(dt.DataSet) :
""" 准备发邮件 """
subject = di.StringItem("邮件标题")
content = di.TextItem("邮件内容")
mail = MailData()
mail.edit()
import smtplib
from email.message import EmailMessage
msg = EmailMessage()
msg.set_content(mail.content)
msg['Subject'] = mail.subject
msg['From'] = 'shenlongbin@qq.com' #请换成你的邮箱
msg['To'] = 'slb-omnifocus@sync.omnigroup.com' #请换成你的邮箱
s = smtplib.SMTP('smtp.qq.com') #请查询你的邮箱服务商的SMTP主机域名
s.login('shenlongbin', 'Password') #请换成你的邮箱用户名和密码
s.send_message(msg)
s.quit()
小结:
- GUI是图形用户界面
- Qt是个跨平台的图形用户界面开发框架
- guidata可以自动生成一个简单的用户界面,收集到一个类的成员变量中
- 搞明白类class和实例instance的关系
- 三个引号是多行字符串,在类、函数之后写上描述性的文字是个好习惯
- 子类继承父类的所有特性,不用操心内部的实现细节
--- END ---
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法