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 paramiko实现ssh远程访问的方法
Dec 03 Python
Python数据结构之Array用法实例
Oct 09 Python
Python入门篇之数字
Oct 20 Python
python实现随机梯度下降(SGD)
Mar 24 Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
Dec 04 Python
Python模拟百度自动输入搜索功能的实例
Feb 14 Python
Python爬虫之UserAgent的使用实例
Feb 21 Python
详解Django中CBV(Class Base Views)模型源码分析
Feb 25 Python
Python3.5以上版本lxml导入etree报错的解决方案
Jun 26 Python
pytorch 常用线性函数详解
Jan 15 Python
python脚本和网页有何区别
Jul 02 Python
Python中with上下文管理协议的作用及用法
Mar 18 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
基于header的一些常用指令详解
2013/06/06 PHP
php中序列化与反序列化详解
2017/02/13 PHP
浅谈PHP的反射API
2017/02/26 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
2017/04/27 PHP
PHP判断当前使用的是什么浏览器(推荐)
2019/10/27 PHP
JavaScript 比较时间大小的代码
2010/04/24 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
jquery应该如何来设置改变按钮input的onclick事件
2012/12/10 Javascript
JS截取url中问号后面参数的值信息
2014/04/29 Javascript
使用Node.js实现HTTP 206内容分片的教程
2015/06/23 Javascript
jQuery 获取跨域XML(RSS)数据的相关总结分析
2016/05/18 Javascript
微信小程序 下拉列表的实现实例代码
2017/03/08 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
Vue组件通信实践记录(推荐)
2017/08/15 Javascript
cocos creator Touch事件应用(触控选择多个子节点的实例)
2017/09/10 Javascript
vue环境搭建简单教程
2017/11/07 Javascript
vuex state及mapState的基础用法详解
2018/04/19 Javascript
jQuery实现table表格信息的展开和缩小功能示例
2018/07/21 jQuery
解决vue-router路由拦截造成死循环问题
2020/08/05 Javascript
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
2020/08/06 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
python读取TXT到数组及列表去重后按原来顺序排序的方法
2015/06/26 Python
python中for用来遍历range函数的方法
2018/06/08 Python
Python实现的简单排列组合算法示例
2018/07/04 Python
详解python中的time和datetime的常用方法
2019/07/08 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
详解CSS3开启硬件加速的使用和坑
2017/08/21 HTML / CSS
聪明的粉丝购买门票的地方:TickPick
2018/03/09 全球购物
高尔夫球鞋、服装、手套和装备:FootJoy
2018/12/15 全球购物
出生证明公证书
2014/04/09 职场文书
中央空调节能方案
2014/06/15 职场文书
我们的节日中秋活动方案
2014/08/19 职场文书
单位委托书
2014/10/15 职场文书
基层党员群众路线整改措施及努力方向
2014/10/28 职场文书
社区母亲节活动总结
2015/02/10 职场文书
SONY600GR,国产收音机厂商永远的痛
2022/04/05 无线电