详解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实现截屏的函数
Jul 25 Python
Python实现文件复制删除
Apr 19 Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
Apr 27 Python
举例讲解Python中metaclass元类的创建与使用
Jun 30 Python
django实现同一个ip十分钟内只能注册一次的实例
Nov 03 Python
Python学习笔记之变量、自定义函数用法示例
May 28 Python
通过pycharm使用git的步骤(图文详解)
Jun 13 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
Feb 13 Python
matplotlib quiver箭图绘制案例
Apr 17 Python
Python如何实现Paramiko的二次封装
Jan 30 Python
python中numpy.empty()函数实例讲解
Feb 05 Python
利用Python判断整数是否是回文数的3种方法总结
Jul 07 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 正则表达式小结
2015/02/12 PHP
PHP加密解密类实例分析
2015/04/20 PHP
php编译安装php-amq扩展简明教程
2016/06/25 PHP
PHP检查URL包含特定字符串实例方法
2019/02/11 PHP
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
JS仿iGoogle自定义首页模块拖拽特效的方法
2015/02/13 Javascript
jQuery同步提交示例代码
2015/12/12 Javascript
js实现统计字符串中特定字符出现个数的方法
2016/08/02 Javascript
canvas实现环形进度条效果
2017/03/23 Javascript
AngularJS中使用ngModal模态框实例
2017/05/27 Javascript
js使用swiper实现层叠轮播效果实例代码
2018/12/12 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
2019/06/04 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
layui form.render('select', 'test2') 更新渲染的方法
2019/09/27 Javascript
小程序外卖订单界面的示例代码
2019/12/30 Javascript
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
python库lxml在linux和WIN系统下的安装
2018/06/24 Python
用python实现k近邻算法的示例代码
2018/09/06 Python
Django通过json格式收集主机信息
2020/05/29 Python
Python接口自动化测试框架运行原理及流程
2020/11/30 Python
用Python自动清理电脑内重复文件,只要10行代码(自动脚本)
2021/01/09 Python
如何用Django处理gzip数据流
2021/01/29 Python
前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)
2018/07/12 HTML / CSS
英国体育器材进口商店:UK Sport Imports
2017/03/14 全球购物
新西兰领先的鞋类和靴子网上商城:Merchant 1948
2017/09/08 全球购物
BAILEY 44官网:美国制造的女性服装
2019/07/01 全球购物
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
英国门销售网站:Green Tree Doors
2020/01/07 全球购物
师范生实习的个人自我鉴定
2013/10/20 职场文书
大学生学雷锋活动总结
2014/06/26 职场文书
合理化建议书
2015/02/04 职场文书
生产车间主任岗位职责
2015/04/08 职场文书
中学生社会实践教育活动总结
2015/05/06 职场文书
2015年审计人员工作总结
2015/05/26 职场文书
我的暑假生活作文(五年级)范文
2019/08/07 职场文书
导游词之云南丽江古城
2019/09/17 职场文书