• 售前

  • 售后

热门帖子
入门百科

详解python3 GUI刷屏器(附源码)

[复制链接]
芊芊551 显示全部楼层 发表于 2021-10-25 19:18:20 |阅读模式 打印 上一主题 下一主题
过年GUI博客二连发,本打算出去玩玩,奈何氛围,天气着实差,遂利用tkinter开辟一款GUI刷屏器,写此博客记录一下我的开辟思路。
一.准备工作

本次利用除tkinter库之外还利用了pynput库,可以利用
  1. pip install pynput
复制代码
安装
二.预览


在长文本框中输入要刷屏的内容,通过设置刷屏频率(单元:秒)即可实现刷屏。
三.计划流程


四.源代码
  1. import re
  2. import time
  3. import pyperclip
  4. from tkinter import *
  5. from tkinter import messagebox
  6. from tkinter import ttk
  7. from pynput.keyboard import Key, Controller
  8. import threading
  9. from PIL import Image ,ImageTk
  10. '''
  11. 难点
  12. 按键复用
  13. '''
  14. imgs=["./rely/logo.png",'./rely/favicon.ico']
  15. class App:
  16. def __init__(self):
  17.   self.flag=True
  18.   self.window = Tk()
  19.   width = 230
  20.   height = 260
  21.   screenWidth = self.window.winfo_screenwidth() # 获取显示区域的宽度
  22.   screenHeight = self.window.winfo_screenheight() # 获取显示区域的高度
  23.   left = (screenWidth - width) / 2
  24.   top = (screenHeight - height) / 2
  25.   self.window.geometry("%dx%d+%d+%d" % (width, height, left, top))
  26.   self.window.title('刷一刷-v1.0')
  27.   self.window.iconbitmap(imgs[1])
  28.   self.window.resizable(0, 0)
  29.   self.create_widget()
  30.   self.config_widget()
  31.   self.place_widget()
  32.   self.window.mainloop()
  33. def create_widget(self):
  34.   self.paned=PanedWindow(self.window)
  35.   self.img=imgs
  36.   photo = Image.open(self.img[0]) # 括号里为需要显示在图形化界面里的图片
  37.   photo = photo.resize((150, 50)) # 规定图片大小
  38.   self.paned.img = ImageTk.PhotoImage(photo)
  39.   self.l0 = Label(self.window, image=self.paned.img, justify='center')
  40.   self.l1 = ttk.Label(self.window, text='内容:')
  41.   self.l1 = ttk.Label(self.window, text='频率:')
  42.   self.t1 = Text(self.window)
  43.   self.c1 = ttk.Combobox(self.window, width=13)
  44.   self.l2=ttk.Label(self.window,text='秒/次')
  45.   self.b1 = ttk.Button(self.window, text='开始', )
  46.   self.b2 = ttk.Button(self.window, text='退出',)
  47.   self.m=Menu(self.window)
  48.   self.window['menu']=self.m
  49.   self.s1=Menu(self.m,tearoff=False)
  50.   self.s2=Menu(self.m,tearoff=False)
  51.   self.s3=Menu(self.m,tearoff=False)
  52. def place_widget(self):
  53.   self.l0.pack()
  54.   self.l1.place(x=20, y=90)
  55.   self.t1.place(x=40, y=60, width=150, height=80)
  56.   self.l1.place(x=20, y=162)
  57.   self.c1.place(x=65, y=160,width=80)
  58.   self.l2.place(x=160,y=160)
  59.   self.b1.place(x=20, y=200)
  60.   self.b2.place(x=125, y=200)
  61. def config_widget(self):
  62.   self.b1.config(command=lambda: self.thread_it(self.start))
  63.   self.b2.config( command=self.window_quit)
  64.   rate_list=['1','0.1','0.01']
  65.   self.c1.config(value=rate_list)
  66.   self.m.add_cascade(label='文件',menu=self.s1)
  67.   self.s1.add_command(label='退出',command=self.window_quit)
  68.   self.m.add_cascade(label='操作',menu=self.s2)
  69.   self.m.add_cascade(label='关于',menu=self.s3)
  70.   self.s2.add_command(label='开始 F9',command=lambda: self.thread_it(self.start))
  71.   self.s2.add_command(label='停止 F10',command=lambda: self.thread_it(self.start))
  72.   self.s3.add_command(label='说明',command=self.show_infos)
  73.   #设置热键
  74.   self.window.bind('<F9>',lambda: self.thread_it(self.pre_start))
  75.   self.window.bind('<F10>',lambda: self.thread_it(self.pre_start))
  76.   self.window.bind('<Escape>',self.escape)
  77.   self.window.bind('<FocusIn>',self.clear_content)
  78.   self.window.protocol('WM_DELETE_WINDOW',self.window_quit)
  79. def clear_content(self,event):
  80.   self.t1.delete(0.0,END)
  81. def pre_start(self,event):
  82.   self.start()
  83. def start(self):
  84.   if self.b1['text']=='开始':
  85.    self.flag=True
  86.    t1_content = self.t1.get(1.0, 'end').strip()
  87.    if len(t1_content) != 0:
  88.     gap = self.c1.get()
  89.     try:
  90.      if re.match('(^0|^1)\.{0,1}\d+$', gap) or int(gap) > 0:
  91.       # 将t1内容复制到剪切板
  92.       pyperclip.copy(t1_content)
  93.       keyboard = Controller()
  94.       self.b1.config(text='停止')
  95.       self.t1.config(state='disable')
  96.       while True:
  97.        # 使用control+v组合键进行粘贴
  98.        if self.flag:
  99.         keyboard.press(Key.ctrl.value)
  100.         keyboard.press('v')
  101.         keyboard.release('v')
  102.         keyboard.release(Key.ctrl.value)
  103.         keyboard.press(Key.enter.value)
  104.         keyboard.release(Key.enter.value)
  105.         print(t1_content)
  106.         time.sleep(float(gap))
  107.        else:
  108.         break
  109.      else:
  110.       messagebox.showerror('错误', '请输入正确的数值!')
  111.       self.c1.delete(0, END)
  112.     except ValueError:
  113.      messagebox.showerror('错误', '请输入正确的数值!')
  114.      self.c1.delete(0, END)
  115.    else:
  116.     messagebox.showerror('错误', '还没有输入内容')
  117.   else:
  118.    self.flag=False
  119.    self.b1.config(text='开始')
  120. def thread_it(self,func,*args):
  121.   t=threading.Thread(target=func,args=args)
  122.   t.setDaemon(True)#设置守护线程,即主线程结束,子线程也结束
  123.   t.start()
  124. def show_infos(self):
  125.   messagebox.showinfo('说明','***本软件完全免费***\n\n1.输入刷屏内容\n2.选择(输入)刷屏频率\n3.开始(F9)刷屏\n4.停止(F10)刷屏')
  126. def window_quit(self):
  127.   ret=messagebox.askyesno('退出','是否要退出?')
  128.   if ret:
  129.    self.window.destroy()
  130. def escape(self,event):
  131.   self.window_quit()
  132. if __name__ == '__main__':
  133. a=App()
复制代码
五.总结

本次利用tkinter写了一款刷屏器,可以大概实现短时间内雷同文本的发送,继而实现刷屏的目标。在代码的撰写上,模拟键盘输入重要参考了:
  1. python模拟鼠标点击和键盘输入的操作
复制代码
实现了组合键Ctrl+V的操纵。本篇技术含量不多,重点在代码逻辑思路上。
到此这篇关于python3 GUI刷屏器(附源码)的文章就介绍到这了,更多相关python刷屏器内容请搜索草根技术分享以前的文章或继承欣赏下面的相关文章希望大家以后多多支持草根技术分享!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作