详解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使用Pycrypto库进行RSA加密的方法详解
Jun 06 Python
python 打印对象的所有属性值的方法
Sep 11 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
Nov 30 Python
Python判断是否json是否包含一个key的方法
Dec 31 Python
对pandas通过索引提取dataframe的行方法详解
Feb 01 Python
pandas 缺失值与空值处理的实现方法
Oct 12 Python
centos7中安装python3.6.4的教程
Dec 11 Python
解决Pycharm的项目目录突然消失的问题
Jan 20 Python
Python TKinter如何自动关闭主窗口
Feb 26 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
Aug 07 Python
Python Selenium XPath根据文本内容查找元素的方法
Dec 07 Python
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
May 14 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 强制性文件下载功能的函数代码(任意文件格式)
2010/05/26 PHP
详解php框架Yaf路由重写
2017/06/20 PHP
在textarea中屏蔽js的某个function的javascript代码
2007/04/20 Javascript
js CSS操作方法集合
2008/10/31 Javascript
javascript中通过arguments参数伪装方法重载
2014/10/08 Javascript
Node.js巧妙实现Web应用代码热更新
2015/10/22 Javascript
浅谈js函数的多种定义方法与区别
2016/11/29 Javascript
详解jQuery lazyload 懒加载
2016/12/19 Javascript
JS简单实现表格排序功能示例
2016/12/20 Javascript
微信小程序实现自定义加载图标功能
2018/07/19 Javascript
Vue源码解析之数组变异的实现
2018/12/04 Javascript
Nodejs处理异常操作示例
2018/12/25 NodeJs
详解vuex之store源码简单解析
2019/06/13 Javascript
express框架下使用session的方法
2019/07/31 Javascript
js实现录音上传功能
2019/11/22 Javascript
Vue+axios封装请求实现前后端分离
2020/10/23 Javascript
Python通过select实现异步IO的方法
2015/06/04 Python
Python简单读取json文件功能示例
2017/11/30 Python
基于numpy中数组元素的切片复制方法
2018/11/15 Python
对python PLT中的image和skimage处理图片方法详解
2019/01/10 Python
Pycharm+Scrapy安装并且初始化项目的方法
2019/01/15 Python
python GUI图形化编程wxpython的使用
2019/07/19 Python
django drf框架自带的路由及最简化的视图
2019/09/10 Python
使用 Python 在京东上抢口罩的思路详解
2020/02/27 Python
Django路由层URLconf作用及原理解析
2020/09/24 Python
python全栈开发语法总结
2020/11/22 Python
澳大利亚领先的睡衣品牌:Peter Alexander
2016/08/16 全球购物
Oroton中国官网:澳洲知名奢侈配饰品牌
2017/03/26 全球购物
生物专业个人自荐信范文
2013/11/29 职场文书
军训自我鉴定怎么写
2014/02/13 职场文书
大学专科自荐信
2014/06/17 职场文书
西安兵马俑导游词
2015/02/02 职场文书
员工规章制度范本
2015/08/07 职场文书
致创业的您:这类人不适合餐饮创业
2019/08/19 职场文书
Python如何导出导入所有依赖包详解
2021/06/08 Python
mysql 子查询的使用
2022/04/28 MySQL