详解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中使用装饰器和元编程实现结构体类实例
Jan 28 Python
Python的包管理器pip更换软件源的方法详解
Jun 20 Python
Python tkinter模块中类继承的三种方式分析
Aug 08 Python
python在每个字符后添加空格的实例
May 07 Python
Pandas 合并多个Dataframe(merge,concat)的方法
Jun 08 Python
JavaScript中的模拟事件和自定义事件实例分析
Jul 27 Python
python os.listdir按文件存取时间顺序列出目录的实例
Oct 21 Python
如何在python中写hive脚本
Nov 08 Python
Python pip安装模块提示错误解决方案
May 22 Python
python中np是做什么的
Jul 21 Python
python绘图pyecharts+pandas的使用详解
Dec 13 Python
python实现xml转json文件的示例代码
Dec 30 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
第十三节 对象串行化 [13]
2006/10/09 PHP
php 清除网页病毒的方法
2008/12/05 PHP
php 目录遍历、删除 函数的使用介绍
2013/04/28 PHP
一段非常简单的让图片自动切换js代码
2006/11/10 Javascript
关于使用runtimeStyle属性问题讨论文章
2007/03/08 Javascript
js和jquery批量绑定事件传参数一(新猪猪原创)
2010/06/23 Javascript
基于jQuery中对数组进行操作的方法
2013/04/16 Javascript
javascript实用小函数使用介绍
2013/11/11 Javascript
jquery toolbar与网页浮动工具条具体实现代码
2014/01/12 Javascript
JavaScript中使用concat()方法拼接字符串的教程
2015/06/06 Javascript
js实现动态加载脚本的方法实例汇总
2015/11/02 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
jquery设置表单元素为不可用的简单代码
2016/07/04 Javascript
JS简单实现表格排序功能示例
2016/12/20 Javascript
详解JavaScript树结构
2017/01/09 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
基于hover的用法实例(推荐)
2017/07/04 Javascript
详解在vue-cli中使用路由
2017/09/25 Javascript
微信小程序如何自定义table组件
2019/06/29 Javascript
js贪心算法 钱币找零问题代码实例
2019/09/11 Javascript
vue实现学生信息管理系统
2020/05/30 Javascript
JavaScript字符和ASCII实现互相转换
2020/06/03 Javascript
在Python的Flask框架中使用日期和时间的教程
2015/04/21 Python
Python中利用sqrt()方法进行平方根计算的教程
2015/05/15 Python
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
python 通过字符串调用对象属性或方法的实例讲解
2018/04/21 Python
Falsk 与 Django 过滤器的使用与区别详解
2019/06/04 Python
如何基于Python实现自动扫雷
2020/01/06 Python
scrapy在python爬虫中搭建出错的解决方法
2020/11/22 Python
pycharm中leetcode插件使用图文详解
2020/12/07 Python
潘多拉珠宝英国官方网上商店:PANDORA英国
2018/06/12 全球购物
欧洲领先的火车票和大巴票预订平台:Trainline
2018/12/26 全球购物
二手房买卖协议书
2014/04/10 职场文书
2015清明节祭奠英烈寄语大全
2015/03/04 职场文书
网络营销实训总结
2015/08/03 职场文书
Node.js实现断点续传
2021/06/23 Javascript