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单链表实现代码实例
Nov 21 Python
Python数据结构之翻转链表
Feb 25 Python
详解python中executemany和序列的使用方法
Aug 12 Python
用TensorFlow实现lasso回归和岭回归算法的示例
May 02 Python
解决项目pycharm能运行,在终端却无法运行的问题
Jan 19 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
Mar 22 Python
如何用C代码给Python写扩展库(Cython)
May 17 Python
django 基于中间件实现限制ip频繁访问过程详解
Jul 30 Python
python word转pdf代码实例
Aug 16 Python
在django中实现页面倒数几秒后自动跳转的例子
Aug 16 Python
Python基础之进程详解
May 21 Python
python 爬取哔哩哔哩up主信息和投稿视频
Jun 07 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 读取文件的正确方法
2009/04/29 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
2011/11/26 PHP
php 注释规范
2012/03/29 PHP
Yii数据库缓存实例分析
2016/03/29 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
2018/05/12 PHP
PHP中Static(静态)关键字功能与用法实例分析
2019/04/05 PHP
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
2010/06/30 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
js日期、星座的级联显示代码
2014/01/23 Javascript
jQuery中replaceAll()方法用法实例
2015/01/16 Javascript
javascript常用经典算法实例详解
2015/11/25 Javascript
jQuery实现获取绑定自定义事件元素的方法
2015/12/02 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
jquery实现输入框实时输入触发事件代码
2016/12/21 Javascript
js实现时间轴自动排列效果
2017/03/09 Javascript
详解10分钟学会vue滚动行为
2017/09/21 Javascript
探索Vue高阶组件的使用
2018/01/08 Javascript
vue实现点击当前标签高亮效果【推荐】
2018/06/22 Javascript
angularjs通过过滤器返回超链接的方法
2018/10/26 Javascript
keep-alive不能缓存多层级路由菜单问题解决
2020/03/10 Javascript
[36:19]2018DOTA2亚洲邀请赛 小组赛 A组加赛 Newbee vs LGD
2018/04/03 DOTA
python创建只读属性对象的方法(ReadOnlyObject)
2013/02/10 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
2020/02/28 Python
python传到前端的数据,双引号被转义的问题
2020/04/03 Python
pycharm 如何取消连按两下shift出现的全局搜索
2021/01/15 Python
浅析Python模块之间的相互引用问题
2021/02/26 Python
html5应用缓存_动力节点Java学院整理
2017/07/13 HTML / CSS
DBA的职责都有哪些
2012/05/16 面试题
大学优秀班主任事迹材料
2014/05/02 职场文书
门球健将观后感
2015/06/16 职场文书
污染环境建议书
2015/09/14 职场文书
《狮子和鹿》教学反思
2016/02/16 职场文书
创业计划书之健康营养产业
2019/10/15 职场文书
centos7安装mysql5.7经验记录
2022/05/02 Servers