步骤:
介绍:
这个脚本可以于QQ 微信 贴吧私信,抖音私信等使用,当自己被问候时可以发送准备好的问候大全进行反击,此脚本的原理就是利用控件调用线程函数让线程实现各种任务(存读骂人刷屏信息,实现刷屏)注意每次用此软件时都需要点击完成不然无法运行。
00这里涉及了线程,GUI, json格式写入读出文件以及线程通信功能
1.导入模块
2.创建GUI类
3.绑定按钮
4.绑定线程
5.实现功能(从这开始讲解)
1.需要导入导入的模块:
import tkinter as tk
import threading
import pyautogui
import pyperclip
from time import sleep
from tkinter import messagebox
from pathlib import Path as Ph
import json
2.创建好类,之后进行编写内容:
1.创建窗口
首先在类外面创建线程通讯信号:
event = threading.Event() # 事件对象
class GUI:
# 创建窗口
def __init__(self):
self.root = tk.Tk()
self.root.title('族谱保卫器(尊严之战)')
self.root.geometry("500x280+650+250") # 显示大小与位置
self.interface() # 显示按钮
self.values = [] # 把输入的词汇存入列表,放在其他处防止每次调用初始化列表
此处创建好窗口,变量root创建GUI库实例,root.title创建窗口的标签如图:
root.geometry("500x280+650+250")是创建窗口大小以及位置,500x280为·大小,650+250为窗口创建的位置,如图:
values = [] 用于收集接受输入框信息函数的内容方便储存为json格式
interface() # 显示按钮,其中interface() 是按钮函数的名称,我们下面再讲:
2.创建按钮方法:
先定义一个按钮方法,将控件布置到函数中:
def interface(self):
self.input_value = tk.StringVar() # 创建输入框
# 创建一个Entry部件,并将其与StringVar对象绑定
self.input_entry = tk.Entry(self.root, textvariable=self.input_value) # 创建部件绑定输入框
self.input_entry.grid(padx=160, pady=15) # 显示输入框
self.Button00 = tk.Button(self.root, text='下一条', command=self.input1)
self.Button00.grid(padx=160)
self.Button1 = tk.Button(self.root, text="完成", command=self.ok) # 绑定start函数
self.Button1.grid(padx=160)
self.Button2 = tk.Button(self.root, text='运行', command=self.start)
self.Button2.grid(padx=160)
self.stops = tk.Button(self.root, text='暂停', command=self.stop)
self.stops.grid(padx=160)
self.quit = tk.Button(self.root, text='加速轰炸', command=self.start_quit1)
self.quit.grid(padx=170)
其中input_value = tk.StringVar() ,input_entry = tk.Entry(self.root, textvariable=self.input_value) 两个方法创建与绑定一个文本输入框,这个输入框用于获取我们要输入的词汇转给储存函数进行储存。Button00 = tk.Button(self.root, text='下一条', command=self.input1) 方法创建了一个名字为下一条的按钮,comman实参绑定了input1()
方法,这个方法用于获取输入框的内容并且清除输入框表面的文字使得用户不需要手动删除文字再添加。grid(padx=160),这个是必须要设置的,不然控件无法显示在ui框内,其中padx是x轴160的位置布局按钮。以此类推后面的按钮。
4.创建个个按钮对应的线程函数:
def start(self):
event.set()
T1 = threading.Thread(target=self.gui, daemon=True) # 等等唤醒线程 设置守护线程避免任务不结束
T1.start() # 简介:此函数为按钮的绑定事件,按下按钮后触发该函数
event.set()方法使得线程不被阻塞,意思就是当线程的目标有event,wait(方法时候线程会被阻塞而不运行,set方法使得被阻塞的线程允许运行T1 = threading.Thread(target=self.gui, daemon=True)中target=指定目标函数,daemon=True设置守护线程避免主线程结束子线程还在运行(程序关闭了但是还在执行)T1.start()当调用这个函数时这个方法开启线程。
def start_quit1(self):
"""此函数用于加快复制黏贴"""
event.set()
T2 = threading.Thread(target=self.quits, daemon=True)
T2.start()
这就这就不多说了,孩子需要自己动脑思考
5.创建接受输入框的内容 函数:
def input1(self):
a = self.input_entry.get() # 获取输入框的信息
self.input_entry.delete(0, 'end') # 清空输入框界面
self.values.append(a)
path = Ph('names.json') # 写入或者创建一个json文件
contons = json.dumps(self.values) # 将输入的信息加入json
path.write_text(contons) # 写入该文件
此处input_entry.get()获取输入框的值,可以定位到按钮方法中了解,input_entry.delete(0, 'end')清空输入的内容不用手动删除再添加,下面就是将获取的内容放入init函数下的容器中呃,注释貌似说明清除下面的内容了
6.创建读取所存入的数据并且进行刷屏操作做准备:
def ok(self):
"""取出对象"""
path = Ph('names.json') # 找到路径文件,名字为names的json文件
data = path.read_text() # 读取文件
self.names = json.loads(data) # 将文件取出
messagebox.showinfo(title='提示:', message='每次使用都需要点保存') # 创建窗口提示
print(self.names)
呃注释也都有了,简单介绍一下,读取文件,提示完成信息,注意每次用此软件时都需要点击完成不然无法运行。
7.实现刷屏操作:
此处原理很简单,读取存储的json字符窜,然后用两个库进行复制和粘贴(等等我讲这么辛苦你不会面向cv编程不看讲解的吧!)
def gui(self):
event.wait() # 阻塞线程
messagebox.showinfo(title='提示:', message='三秒钟后开始,请返回聊天界面')
sleep(3)
ddd = 0
self.lb = tk.Label(self.root, text=f'已发送 {ddd} 条')
self.lb.grid(padx=170)
while event.is_set(): # 检查是否设置了事件, 线程被设置False时while会自动停止循环
for i in self.names:
pyperclip.copy(i) # 复制文字
pyperclip.paste() # 取出剪切板数据
pyautogui.hotkey('ctrl', 'v')
pyautogui.press('enter')
ddd +=1
self.lb.config(text=f'已发送 {ddd} 次')
考虑到看到标题进入的可能都有些基础就不多说了,简单介绍一下逻辑:
点击运行时调用线程T1之后开启线程,set()方法使得该函数不再阻塞开始运行,出现弹窗提示用户切回聊天页面等待程序运行Label(self.root, text=f'已发送 {ddd} 条')提示发送信息的次数,whie无限循环套着for循环,for循环遍历出存入json的刷屏数据进行轮流粘贴,完成循环一次ddd加一次,更改原本的标签信息显示
8.创建暂停函数:
def stop(self):
event.clear()
此函数将wait方法内部设置为Flase阻塞线程,while循环判断它是否为True,如果不是则停止运行。加速函数就不介绍了原理相同
9.显示GUI:
if __name__ == '__main__':
a = GUI() # 实例化窗口
a.root.mainloop() # 显示窗口
10.接下来是全部函数,可能顺序会比价乱
import tkinter as tk
import threading
import pyautogui
import pyperclip
from time import sleep
from tkinter import messagebox
from pathlib import Path as Ph
import json
event = threading.Event() # 事件对象
class GUI:
# 创建窗口
def __init__(self):
self.root = tk.Tk()
self.root.title('族谱保卫器(尊严之战)')
self.root.geometry("500x280+650+250") # 显示大小与位置
self.interface() # 显示按钮
self.values = [] # 把输入的词汇存入列表,放在其他处防止每次调用初始化列表
def interface(self):
self.input_value = tk.StringVar() # 创建输入框
# 创建一个Entry部件,并将其与StringVar对象绑定
self.input_entry = tk.Entry(self.root, textvariable=self.input_value) # 创建部件绑定输入框
self.input_entry.grid(padx=160, pady=15) # 显示输入框
self.Button00 = tk.Button(self.root, text='下一条', command=self.input1)
self.Button00.grid(padx=160)
self.Button1 = tk.Button(self.root, text="完成", command=self.ok) # 绑定start函数
self.Button1.grid(padx=160)
self.Button2 = tk.Button(self.root, text='运行', command=self.start)
self.Button2.grid(padx=160)
self.stops = tk.Button(self.root, text='暂停', command=self.stop)
self.stops.grid(padx=160)
self.quit = tk.Button(self.root, text='加速轰炸', command=self.start_quit1)
self.quit.grid(padx=170)
def gui(self):
event.wait() # 阻塞线程
messagebox.showinfo(title='提示:', message='三秒钟后开始,请返回聊天界面')
sleep(3)
ddd = 0
self.lb = tk.Label(self.root, text=f'已发送 {ddd} 条')
self.lb.grid(padx=170)
while event.is_set(): # 检查是否设置了事件, 线程被设置False时while会自动停止循环
for i in self.names:
pyperclip.copy(i) # 复制文字
pyperclip.paste() # 取出剪切板数据
pyautogui.hotkey('ctrl', 'v')
pyautogui.press('enter')
ddd +=1
self.lb.config(text=f'已发送 {ddd} 次')
def start(self):
event.set()
T1 = threading.Thread(target=self.gui, daemon=True) # 等等唤醒线程 设置守护线程避免任务不结束
T1.start()
def stop(self):
event.clear()
def input1(self):
a = self.input_entry.get() # 获取输入框的信息
self.input_entry.delete(0, 'end') # 清空输入框界面
self.values.append(a)
path = Ph('names.json') # 写入或者创建一个json文件
contons = json.dumps(self.values) # 将输入的信息加入json
path.write_text(contons) # 写入该文件
def ok(self):
"""取出对象"""
path = Ph('names.json') # 找到路径文件,名字为names的json文件
data = path.read_text() # 读取文件
self.names = json.loads(data) # 将文件取出
messagebox.showinfo(title='提示:', message='每次使用都需要点保存') # 创建窗口提示
print(self.names)
def start_quit1(self):
"""此函数用于加快复制黏贴"""
event.set()
T2 = threading.Thread(target=self.quits, daemon=True)
T2.start()
def quits(self):
event.wait()
while event.is_set(): # 检查是否设置了事件, 线程被设置False时while会自动停止循环
pyautogui.hotkey('ctrl', 'v')
pyautogui.press('enter')
sleep(0.1)
if __name__ == '__main__':
a = GUI() # 实例化窗口
a.root.mainloop() # 显示窗口