python3+pyqt5+itchat微信定时发送消息的方法


Posted in Python onFebruary 20, 2019

编这个程序是想过节过年,一些重要的纪念日,给亲戚好友发祝福之类的,但要凌晨0点才显得比较有诚意,可我又比较贪睡,常常忘了,所以就有了编个微信定时发送消息小程序.

运行环境:

python 3.x,不支持python2

准备工作

由于我用到了微信的接口,所以引入itchat

界面用了pyqt5

安装命令如下:

pip install PyQt5
pip install itchat

代码部分

# -*- coding: utf-8 -*-
# @Time  : 2018/9/25 11:06
# @Author : Tangweeiyang
# @File  : weixinSender.py

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon,QFont
import sys
import datetime
import time
import itchat
import threading
from tkinter import messagebox

class FriendsList(QThread):
  sinOut = pyqtSignal(str)
  # 自定义信号,执行run()函数时,从相关线程发射此信号

  def __init__(self):
    super().__init__()

  def run(self):

    itchat.auto_login(hotReload=True)
    friendList = itchat.get_friends()
    for each in friendList:
      if len(each['RemarkName']) < 2: #如果 备注名为空,则用微信昵称
        self.sinOut.emit(each['NickName'])
      else:
        self.sinOut.emit(each['RemarkName'])

class sendMessage(QThread):

  def __init__(self,message,name,time):
    super().__init__()
    self.message=message
    self.name=name
    self.time=time

  def run(self):
    timer = threading.Timer(self.time,self.send)
    timer.start()

  def send(self):

    itchat.auto_login(hotReload=True)
    sender = itchat.search_friends(self.name)[0]['UserName']
    itchat.send(self.message, toUserName=sender)
    itchat.send(self.message, toUserName='filehelper')
    messagebox.showinfo('消息','发送成功')


class weixinSender(QListWidget):

  def __init__(self):
    super().__init__()
    self.Ui()
    # self.dataProduce()

  def Ui(self):
    self.year_label = QLabel('年')
    self.year=QLineEdit()
    self.month_label=QLabel('月')
    self.month=QLineEdit()
    self.day_label=QLabel('日')
    self.day=QLineEdit()
    self.friendList_lable=QLabel('好友')
    self.friendList=QComboBox()

    self.hour_label = QLabel('时')
    self.hour = QLineEdit()
    self.min_label = QLabel('分')
    self.min = QLineEdit()
    self.second_label = QLabel('秒')
    self.second = QLineEdit()

    self.text=QTextEdit() #文本域
    self.listbt = QPushButton('获取好友列表')
    self.OKbt=QPushButton('定期发送')


    grid = QGridLayout()
    grid.setSpacing(10) # 创建标签之间的空间

    grid.addWidget(self.year_label,1,1)
    grid.addWidget(self.year,1,0)
    grid.addWidget(self.month_label,1,3)
    grid.addWidget(self.month,1,2)
    grid.addWidget(self.day_label,1,5)
    grid.addWidget(self.day,1,4)
    grid.addWidget(self.friendList_lable,1,6,2,1)
    grid.addWidget(self.friendList,1,7,2,3)

    grid.addWidget(self.hour_label,2,1)
    grid.addWidget(self.hour,2,0)
    grid.addWidget(self.min_label,2,3)
    grid.addWidget(self.min,2,2)
    grid.addWidget(self.second_label,2,5)
    grid.addWidget(self.second,2,4)

    grid.addWidget(self.text,3,0,4,10)
    grid.addWidget(self.listbt,7,5,1,2)
    grid.addWidget(self.OKbt,7,7,1,2)

    self.setLayout(grid)

    self.friendList.addItem('好友1')
    self.friendList.addItem('好友2')

    self.text.setFont(QFont("楷体",12,QFont.Normal))

    self.OKbt.clicked.connect(self.send)
    self.listbt.clicked.connect(self.dataProduce)
    self.setGeometry(300, 300, 500, 300)
    self.setWindowTitle('定时发送消息')
    self.setWindowIcon(QIcon('weixinIcon.jpg')) #窗口图标
    self.show()

  def dataProduce(self):
    now=time.localtime()
    self.year.setText(str(now.tm_year))
    self.month.setText(str(now.tm_mon))
    self.day.setText(str(now.tm_mday))
    self.hour.setText(str(now.tm_hour))
    self.min.setText(str(now.tm_min))
    self.second.setText(str(now.tm_sec))

    self.friendList.clear()
    self.thread=FriendsList()
    self.thread.sinOut.connect(self.slotAdd)
    self.thread.start()

  def slotAdd(self,name):
    self.friendList.addItem(name)

  def send(self):
    self.target = datetime.datetime(int(self.year.text()),int(self.month.text()),int(self.day.text()),int(self.hour.text()),int(self.min.text()),int(self.second.text()))
    self.now = time.time()
    self.delay_time = self.target.timestamp() - self.now
    self.sendThread=sendMessage(self.text.toPlainText(),self.friendList.currentText(),self.delay_time)
    self.sendThread.start()

if __name__ == '__main__':
  app = QApplication(sys.argv)
  ex = weixinSender()
  sys.exit(app.exec_())

运行步骤

1.代码复制粘贴完毕后,运行,界面如图(可以将程序中的图标改成你喜欢的图片)

python3+pyqt5+itchat微信定时发送消息的方法

2.点获取好友列表按钮,第一次会弹出微信网页版登录的二维码(第二次运行,itchat会记录你登录记录,只需要点击你手机微信的确认登录的按钮),用手机微信扫描登录即可.时间框里会显示当前的时间,你改成设定时间发送即可(若约定时间已经过了,则消息会立即发送),在好友的下拉列表里选择你要发送的好友(如果好友有备注,则显示备注,否则显示微信昵称),在下面的文本框输入你想要发送的消息,目前只支持文字,不支持图片

最后一步,点击定期发送按钮,静待好友收到消息,并且我设置了文件助手也会收到这条消息,不过你也可以删除.

最后的效果图

python3+pyqt5+itchat微信定时发送消息的方法

以上这篇python3+pyqt5+itchat微信定时发送消息的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python爬取读者并制作成PDF
Mar 10 Python
python 3.5下xadmin的使用及修复源码bug
May 10 Python
给你选择Python语言实现机器学习算法的三大理由
Nov 15 Python
Python爬虫实例_城市公交网络站点数据的爬取方法
Jan 10 Python
python3 发送任意文件邮件的实例
Jan 23 Python
Python+selenium点击网页上指定坐标的实例
Jul 05 Python
python正则-re的用法详解
Jul 28 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
Sep 11 Python
python 实现两个npy档案合并
Jul 01 Python
Python爬取微信小程序通用方法代码实例详解
Sep 29 Python
python获取linux系统信息的三种方法
Oct 14 Python
python中的列表和元组区别分析
Dec 30 Python
钉钉群自定义机器人消息Python封装的实例
Feb 20 #Python
python3实现zabbix告警推送钉钉的示例
Feb 20 #Python
python实现图书借阅系统
Feb 20 #Python
python 调用钉钉机器人的方法
Feb 20 #Python
python钉钉机器人运维脚本监控实例
Feb 20 #Python
Python实现钉钉发送报警消息的方法
Feb 20 #Python
python给微信好友定时推送消息的示例
Feb 20 #Python
You might like
php框架Phpbean说明
2008/01/10 PHP
php下获取客户端ip地址的函数
2010/03/15 PHP
PHP 动态随机生成验证码类代码
2010/04/09 PHP
php输出xml必须header的解决方法
2014/10/17 PHP
php判断linux下程序问题实例
2015/07/09 PHP
PHP防止图片盗用(盗链)的方法小结
2016/11/11 PHP
传递参数的标准方法(jQuery.ajax)
2008/11/19 Javascript
jquery 图片预加载 自动等比例缩放插件
2008/12/25 Javascript
从父页面读取和操作iframe中内容方法
2009/07/25 Javascript
高亮显示web页表格行的javascript代码
2010/11/19 Javascript
JQuery each()函数如何优化循环DOM结构的性能
2012/12/10 Javascript
Javascript中产生固定结果的函数优化技巧
2013/01/16 Javascript
js+html5实现的自由落体运动效果代码
2016/01/28 Javascript
jQuery实现图片向左向右切换效果的简单实例
2016/05/18 Javascript
JS遍历页面所有对象属性及实现方法
2016/08/01 Javascript
微信小程序 教程之注册程序
2016/10/17 Javascript
JavaScript 监控微信浏览器且自带返回按钮时间
2016/11/27 Javascript
Vue监听数组变化源码解析
2017/03/09 Javascript
vue使用keep-alive实现数据缓存不刷新
2017/10/21 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
2019/03/11 Javascript
node.js实现微信开发之获取用户授权
2019/03/18 Javascript
新手快速入门微信小程序组件库 iView Weapp
2019/06/24 Javascript
微信小程序实现导航栏和内容上下联动功能代码
2020/06/29 Javascript
如何在 Vue 表单中处理图片
2021/01/26 Vue.js
简单了解Python下用于监视文件系统的pyinotify包
2015/11/13 Python
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
解读python logging模块的使用方法
2018/04/17 Python
Python可迭代对象操作示例
2019/05/07 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
Python面向对象实现方法总结
2020/08/12 Python
世界著名的顶级牛排:Omaha Steak(奥马哈牛排)
2016/09/20 全球购物
Carolina Lemke Berlin澳大利亚官网:时尚太阳镜品牌
2019/09/17 全球购物
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2013/05/03 面试题
门卫岗位职责说明书
2014/08/18 职场文书
专项资金申请报告
2015/05/15 职场文书
班级联欢会主持词
2015/07/03 职场文书