基于PyQT5制作一个桌面摸鱼工具


Posted in Python onFebruary 15, 2022

前言

现在我能一整天都严肃地盯着屏幕,看起来就像在很认真地工作,

利用摸鱼,打开小说,可实行完美摸鱼,实时保存进度

用PYQT5 Mock一个摸鱼软件 类似于Thief

按键功能控制

q 退出

B 书签功能

F 增加字体大小

Shift F 减小字体

O 打开文件,现在仅仅支持 utf8格式的txt文件

主要功能

FlameLess Window 无边框窗口

一键快速退出

ini 文件读写

右键上下文菜单

核心代码

pyqt 实现功能还是比较顺畅的,总体功能实现代码量不到200行

from PyQt5 import QtCore
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt
import sys,os
import configparser

# Q to quit app
# B Bookmark 
# F increase Font size 
# Shift F decrease Font size
# O Open *.txt file

class FisherReader(QMainWindow):
	def __init__(self):
		super().__init__()
		
		# drag
		self.pos =[0,0]
		self.mouse_down = False
		self.down = [0,0]
		self.prev = [0,0]
		# text
		self.txtName = ''
		self.text = []
		self.index = 0
		# style
		self.show_info = False
		self.font_size = 8
		self.bgColor = QColor(255,255,255)
		self.defPalette()
		# self.read_Txt()

	def mousePressEvent(self, event):
		current = [event.pos().x(),event.pos().y()]
		self.down = current
		self.mouse_down = True

	def mouseMoveEvent(self,event):
		current = [event.pos().x(),event.pos().y()]
		if self.mouse_down:
			delta = [current[0]-self.down[0],current[1]-self.down[1]]
			new = [self.pos[0]+delta[0],self.pos[1]+delta[1]]
			self.move(new[0],new[1])
			self.pos = new
			# print(self.pos)
			self.prev = current

	def mouseReleaseEvent(self, event):
		self.mouse_down = False

	def keyPressEvent(self,event):
		if event.key() == Qt.Key_Q:
			app.quit()
		if event.key() == Qt.Key_Down:
			if self.index < len(self.text)-1:
				self.index = self.index+1
				self.update()
		if event.key() == Qt.Key_Up:
			if self.index > 0:
				self.index = self.index-1
				self.update()
		if event.key() == Qt.Key_F:
			if event.modifiers() & QtCore.Qt.ShiftModifier and self.font_size >2:
				self.font_size -= 2
			else:
				self.font_size += 2
			self.update()
		if event.key() == Qt.Key_I:
			self.show_info = not self.show_info
			self.update()
		if event.key() == Qt.Key_O:
			self.open()
			self.update()
		if event.key() == Qt.Key_B:
			self.addBookmark()
		if event.key() == Qt.Key_R:
			self.getBookmark()
			

	def defPalette(self):
		p = self.palette()
		p.setColor(QPalette.Background,self.bgColor)
		self.window().setPalette(p)

	def paintEvent(self,event):
		painter = QPainter(self)
		painter.setRenderHints(QPainter.Antialiasing)
		if len(self.text)>0:
			painter.setFont(QFont('SimSun',self.font_size))
			painter.drawText(QtCore.QRectF(10,10,600,50),Qt.AlignLeft,self.text[self.index])

			if self.show_info:
				painter.drawText(QtCore.QRectF(610,10,50,50),Qt.AlignLeft,"{}/{}".format(self.index+1,len(self.text)))

	def open(self):
		path, _ = QFileDialog.getOpenFileName(self, "打开文件",os.getcwd(), "Text files (*.txt)")

		if path:
			self.txtName = path
			self.read_Txt_smart(path)
			self.update()

	def read_Txt(self,file):
		with open(file,'r',encoding="UTF-8") as f:
			self.text = f.readlines()

	def cut(self,text,length):
		return [text[i:i+length] for i in range(0,len(text),length)]

	def wheelEvent(self, e):
		if e.angleDelta().y() < 0:
			if self.index < len(self.text)-1:
				self.index = self.index+1
		elif e.angleDelta().y() > 0:
			if self.index > 0:
				self.index = self.index-1
		self.update()  

	def addBookmark(self):
		config = configparser.ConfigParser()
		path = "bookmark.ini"

		config.add_section('bookmark')
		config.set('bookmark','path',self.txtName)
		config.set('bookmark','bookmark',str(self.index))
		config.write(open(path,'w'))

	def getBookmark(self):
		config = configparser.ConfigParser()
		path = "bookmark.ini"
		config.read(path)

		if config.has_option('bookmark','path'):
			self.txtName = config.get('bookmark','path')
			self.index = int(config.get('bookmark','bookmark'))
			self.read_Txt_smart(self.txtName);
			self.update()


	def read_Txt_smart(self,file):
		with open(file,'r',encoding="UTF-8") as f:
			text_buffer = []
			lines = f.readlines()
			for line in lines:
				cline = self.cut(line,30)
				for cl in cline:
					if len(cl)>1:
						text_buffer.append(cl)
			self.text = text_buffer

if __name__ == '__main__':
	app = QApplication(sys.argv)
	fisher = FisherReader()
	fisher.resize(660,45)
	fisher.setWindowFlags(Qt.FramelessWindowHint|Qt.WindowStaysOnTopHint)
	fisher.show()
	fisher.setWindowTitle("小鱼")
	sys.exit(app.exec_())

到此这篇关于基于PyQT5制作一个桌面摸鱼工具的文章就介绍到这了,更多相关PyQT5桌面摸鱼工具内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
分析用Python脚本关闭文件操作的机制
Jun 28 Python
django限制匿名用户访问及重定向的方法实例
Feb 07 Python
浅谈django orm 优化
Aug 18 Python
对python PLT中的image和skimage处理图片方法详解
Jan 10 Python
python和php哪个容易学
Jun 19 Python
8种常用的Python工具
Aug 05 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
Oct 28 Python
python爬虫调度器用法及实例代码
Nov 30 Python
解决python3.6用cx_Oracle库连接Oracle的问题
Dec 07 Python
python time.strptime格式化实例详解
Feb 03 Python
Django使用echarts进行可视化展示的实践
Jun 10 Python
pytorch分类模型绘制混淆矩阵以及可视化详解
Apr 07 Python
python接口测试返回数据为字典取值方式
Feb 12 #Python
Python socket如何解析HTTP请求内容
Feb 12 #Python
python全面解析接口返回数据
Feb 12 #Python
http通过StreamingHttpResponse完成连续的数据传输长链接方式
Feb 12 #Python
python中出现invalid syntax报错的几种原因分析
Feb 12 #Python
python ConfigParser库的使用及遇到的坑
Feb 12 #Python
Python制作春联的示例代码
Jan 22 #Python
You might like
NO3第三帝国留言簿制作过程
2006/10/09 PHP
PHP+FLASH实现上传文件进度条相关文件 下载
2007/07/21 PHP
php获取301跳转URL简单实例
2013/12/16 PHP
thinkPHP2.1自定义标签库的导入方法详解
2016/07/20 PHP
tp5.1 框架数据库-数据集操作实例分析
2020/05/26 PHP
jquery.validate使用攻略 第一部
2010/07/01 Javascript
AngularJS基础学习笔记之简单介绍
2015/05/10 Javascript
自己动手写的jquery分页控件(非常简单实用)
2015/10/28 Javascript
javascript时间戳和日期字符串相互转换代码(超简单)
2016/06/22 Javascript
关于angularJs指令的Scope(作用域)介绍
2016/10/25 Javascript
jquery日历插件e-calendar升级版
2016/11/10 Javascript
vue2.0获取自定义属性的值
2017/03/28 Javascript
禁止弹窗中蒙层底部页面跟随滚动的几种方法
2017/12/07 Javascript
javascript实现自由编辑图片代码详解
2019/06/21 Javascript
JavaScript实现单英文金山打字通
2020/07/24 Javascript
微信小程序渲染性能调优小结
2019/07/30 Javascript
layui动态加载多表头的实例
2019/09/05 Javascript
[01:45]绝对公平!DOTA2队长征召模式详解
2014/04/25 DOTA
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
Python中的异常处理学习笔记
2015/01/28 Python
python 创建弹出式菜单的实现代码
2017/07/11 Python
Django Web开发中django-debug-toolbar的配置以及使用
2018/05/06 Python
对python的bytes类型数据split分割切片方法
2018/12/04 Python
对python中不同模块(函数、类、变量)的调用详解
2019/07/16 Python
Python 字符串类型列表转换成真正列表类型过程解析
2019/08/26 Python
python实现控制台输出彩色字体
2020/04/05 Python
matplotlib教程——强大的python作图工具库
2020/10/15 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
德国著名廉价网上药店:Shop-Apotheke
2017/07/23 全球购物
乔布斯斯坦福大学演讲稿
2014/05/23 职场文书
大学生求职信
2014/06/17 职场文书
医学专业毕业生求职信
2014/06/20 职场文书
关爱空巢老人感想
2015/08/11 职场文书
导游词之潮音寺
2019/09/26 职场文书
小程序与后端Java接口交互实现HelloWorld入门
2021/07/09 Java/Android
在SQL Server中使用 Try Catch 处理异常的示例详解
2022/07/15 SQL Server