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


Posted in Python onFebruary 18, 2021

过年GUI博客二连发,本打算出去玩玩,奈何空气,天气实在差,遂使用tkinter开发一款GUI刷屏器,写此博客记录一下我的开发思路。

一.准备工作

本次使用除tkinter库之外还使用了pynput库,可以使用

pip install pynput

安装

二.预览

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

在长文本框中输入要刷屏的内容,通过设置刷屏频率(单位:秒)即可实现刷屏。

三.设计流程

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

四.源代码

import re
import time
import pyperclip
from tkinter import *
from tkinter import messagebox
from tkinter import ttk
from pynput.keyboard import Key, Controller
import threading
from PIL import Image ,ImageTk

'''
难点
按键复用
'''

imgs=["./rely/logo.png",'./rely/favicon.ico']
class App:
 def __init__(self):
  self.flag=True
  self.window = Tk()
  width = 230
  height = 260
  screenWidth = self.window.winfo_screenwidth() # 获取显示区域的宽度
  screenHeight = self.window.winfo_screenheight() # 获取显示区域的高度
  left = (screenWidth - width) / 2
  top = (screenHeight - height) / 2
  self.window.geometry("%dx%d+%d+%d" % (width, height, left, top))
  self.window.title('刷一刷-v1.0')
  self.window.iconbitmap(imgs[1])
  self.window.resizable(0, 0)
  self.create_widget()
  self.config_widget()
  self.place_widget()
  self.window.mainloop()

 def create_widget(self):
  self.paned=PanedWindow(self.window)
  self.img=imgs
  photo = Image.open(self.img[0]) # 括号里为需要显示在图形化界面里的图片
  photo = photo.resize((150, 50)) # 规定图片大小
  self.paned.img = ImageTk.PhotoImage(photo)
  self.l0 = Label(self.window, image=self.paned.img, justify='center')
  self.l1 = ttk.Label(self.window, text='内容:')
  self.l1 = ttk.Label(self.window, text='频率:')
  self.t1 = Text(self.window)
  self.c1 = ttk.Combobox(self.window, width=13)
  self.l2=ttk.Label(self.window,text='秒/次')
  self.b1 = ttk.Button(self.window, text='开始', )
  self.b2 = ttk.Button(self.window, text='退出',)
  self.m=Menu(self.window)
  self.window['menu']=self.m
  self.s1=Menu(self.m,tearoff=False)
  self.s2=Menu(self.m,tearoff=False)
  self.s3=Menu(self.m,tearoff=False)

 def place_widget(self):
  self.l0.pack()
  self.l1.place(x=20, y=90)
  self.t1.place(x=40, y=60, width=150, height=80)
  self.l1.place(x=20, y=162)
  self.c1.place(x=65, y=160,width=80)
  self.l2.place(x=160,y=160)
  self.b1.place(x=20, y=200)
  self.b2.place(x=125, y=200)

 def config_widget(self):
  self.b1.config(command=lambda: self.thread_it(self.start))
  self.b2.config( command=self.window_quit)
  rate_list=['1','0.1','0.01']
  self.c1.config(value=rate_list)
  self.m.add_cascade(label='文件',menu=self.s1)
  self.s1.add_command(label='退出',command=self.window_quit)
  self.m.add_cascade(label='操作',menu=self.s2)
  self.m.add_cascade(label='关于',menu=self.s3)
  self.s2.add_command(label='开始 F9',command=lambda: self.thread_it(self.start))
  self.s2.add_command(label='停止 F10',command=lambda: self.thread_it(self.start))
  self.s3.add_command(label='说明',command=self.show_infos)
  #设置热键
  self.window.bind('<F9>',lambda: self.thread_it(self.pre_start))
  self.window.bind('<F10>',lambda: self.thread_it(self.pre_start))
  self.window.bind('<Escape>',self.escape)
  self.window.bind('<FocusIn>',self.clear_content)
  self.window.protocol('WM_DELETE_WINDOW',self.window_quit)

 def clear_content(self,event):
  self.t1.delete(0.0,END)

 def pre_start(self,event):
  self.start()

 def start(self):
  if self.b1['text']=='开始':
   self.flag=True
   t1_content = self.t1.get(1.0, 'end').strip()
   if len(t1_content) != 0:
    gap = self.c1.get()
    try:
     if re.match('(^0|^1)\.{0,1}\d+$', gap) or int(gap) > 0:
      # 将t1内容复制到剪切板
      pyperclip.copy(t1_content)
      keyboard = Controller()
      self.b1.config(text='停止')
      self.t1.config(state='disable')
      while True:
       # 使用control+v组合键进行粘贴
       if self.flag:
        keyboard.press(Key.ctrl.value)
        keyboard.press('v')
        keyboard.release('v')
        keyboard.release(Key.ctrl.value)
        keyboard.press(Key.enter.value)
        keyboard.release(Key.enter.value)
        print(t1_content)
        time.sleep(float(gap))
       else:
        break
     else:
      messagebox.showerror('错误', '请输入正确的数值!')
      self.c1.delete(0, END)
    except ValueError:
     messagebox.showerror('错误', '请输入正确的数值!')
     self.c1.delete(0, END)
   else:
    messagebox.showerror('错误', '还没有输入内容')
  else:
   self.flag=False
   self.b1.config(text='开始')

 def thread_it(self,func,*args):
  t=threading.Thread(target=func,args=args)
  t.setDaemon(True)#设置守护线程,即主线程结束,子线程也结束
  t.start()

 def show_infos(self):
  messagebox.showinfo('说明','***本软件完全免费***\n\n1.输入刷屏内容\n2.选择(输入)刷屏频率\n3.开始(F9)刷屏\n4.停止(F10)刷屏')

 def window_quit(self):
  ret=messagebox.askyesno('退出','是否要退出?')
  if ret:
   self.window.destroy()

 def escape(self,event):
  self.window_quit()


if __name__ == '__main__':
 a=App()

五.总结

本次使用tkinter写了一款刷屏器,能够实现短时间内相同文本的发送,继而实现刷屏的目的。在代码的撰写上,模拟键盘输入主要参考了:

实现了组合键Ctrl+V的操作。本篇技术含量不多,重点在代码逻辑思路上。

到此这篇关于python3 GUI刷屏器(附源码)的文章就介绍到这了,更多相关python刷屏器内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
举例讲解Python中的身份运算符的使用方法
Oct 13 Python
用生成器来改写直接返回列表的函数方法
May 25 Python
Python文件循环写入行时防止覆盖的解决方法
Nov 09 Python
Python装饰器基础概念与用法详解
Dec 22 Python
Python设计模式之外观模式实例详解
Jan 17 Python
python适合人工智能的理由和优势
Jun 28 Python
python sqlite的Row对象操作示例
Sep 11 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
Nov 11 Python
解决django model修改添加字段报错的问题
Nov 18 Python
在python中创建指定大小的多维数组方式
Nov 28 Python
Python如何基于smtplib发不同格式的邮件
Dec 30 Python
Python实现信息轰炸工具(再也不怕说不过别人了)
Jun 11 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
Feb 18 #Python
Python如何telnet到网络设备
Feb 18 #Python
Python运算符+与+=的方法实例
Feb 18 #Python
python 获取计算机的网卡信息
Feb 18 #Python
python中time tzset()函数实例用法
Feb 18 #Python
python中zip()函数遍历多个列表方法
Feb 18 #Python
python模块内置属性概念及实例
Feb 18 #Python
You might like
php中类和对象:静态属性、静态方法
2017/04/09 PHP
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
php+ajax实现异步上传文件或图片功能
2017/07/18 PHP
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
基于javascript滚动图片具体实现
2013/11/18 Javascript
jquery scroll()区分横向纵向滚动条的方法
2014/04/04 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
JavaScript检测鼠标移动方向的方法
2015/05/22 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
2015/08/23 Javascript
jQuery实现选项卡切换效果简单演示
2015/12/09 Javascript
基于javascript实现句子翻牌网页版小游戏
2016/03/23 Javascript
JavaScript实现广告弹窗效果
2016/08/09 Javascript
微信小程序(应用号)开发新闻客户端实例
2016/10/24 Javascript
CSS+jQuery实现简单的折叠菜单
2016/12/20 Javascript
angular json对象push到数组中的方法
2018/02/27 Javascript
Vue-cli配置打包文件本地使用的教程图解
2018/08/02 Javascript
微信小程序如何引用外部js,外部样式,公共页面模板
2019/07/23 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
2020/07/27 Javascript
python基础教程之获取本机ip数据包示例
2014/02/10 Python
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
Python基于列表模拟堆栈和队列功能示例
2018/01/05 Python
Python实现的knn算法示例
2018/06/14 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
速比涛英国官网:Speedo英国
2019/07/15 全球购物
师范生实习的个人自我鉴定
2013/10/20 职场文书
电子工程专业毕业生求职信
2014/03/14 职场文书
销售总经理岗位职责
2014/03/15 职场文书
大学生求职计划书
2014/04/30 职场文书
2015年班级元旦晚会活动总结
2014/11/28 职场文书
时尚女魔头观后感
2015/06/04 职场文书
小学三年级数学教学反思
2016/02/16 职场文书
phpQuery解析HTML乱码问题(补充官网未列出的乱码解决方案)
2021/04/01 PHP
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL