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 for Informatics 第11章 正则表达式(一)
Apr 21 Python
pygame实现弹力球及其变速效果
Jul 03 Python
Python实现PS图像明亮度调整效果示例
Jan 23 Python
详解python字节码
Feb 07 Python
Python3 A*寻路算法实现方式
Dec 24 Python
Python PyPDF2模块安装使用解析
Jan 19 Python
使用 Python 读取电子表格中的数据实例详解
Apr 17 Python
python 追踪except信息方式
Apr 25 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
Jun 04 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
Nov 29 Python
Python+OpenCV实现在图像上绘制矩形
Mar 21 Python
Python+DeOldify实现老照片上色功能
Jun 21 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
phpMyAdmin2.11.6安装配置方法
2008/08/24 PHP
php 读取shell管道传输过来的内容
2010/03/01 PHP
php xml 入门学习资料
2011/01/01 PHP
php array_unique之后json_encode需要注意
2011/01/02 PHP
php二维数组排序详解
2013/11/06 PHP
PHP之autoload运行机制实例分析
2014/08/28 PHP
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
用js实现的检测浏览器和系统的函数
2009/04/09 Javascript
jquery 页面滚动到指定DIV实现代码
2013/09/25 Javascript
jquery.hotkeys监听键盘按下事件keydown插件
2014/05/11 Javascript
JavaScript中最简洁的编码html字符串的方法
2014/10/11 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
Jquery uploadify上传插件使用详解
2016/01/13 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
2016/05/13 Javascript
基于canvas的二维码邀请函生成插件
2017/02/14 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
2018/09/14 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
vue项目配置同一局域网可使用ip访问的操作
2020/10/23 Javascript
[01:05:40]VG vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python 随机生成中文验证码的实例代码
2013/03/20 Python
10招!看骨灰级Pythoner玩转Python的方法
2019/04/15 Python
通过字符串导入 Python 模块的方法详解
2019/10/27 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
Python同时迭代多个序列的方法
2020/07/28 Python
Django用内置方法实现简单搜索功能的方法
2020/12/18 Python
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
2013/01/09 HTML / CSS
美国皮靴公司自1863年:The Frye Company
2016/11/30 全球购物
ddl,dml和dcl的含义
2016/05/08 面试题
大学生四个方面的自我评价
2013/09/19 职场文书
《燕子》教学反思
2014/02/18 职场文书
花坛标语大全
2014/06/30 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
服务员岗位职责
2015/02/03 职场文书
JavaScript实例 ODO List分析
2022/01/22 Javascript