基于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 相关文章推荐
python3.0 字典key排序
Dec 24 Python
python错误处理详解
Sep 28 Python
Python爬取网页中的图片(搜狗图片)详解
Mar 23 Python
Python实现pdf文档转txt的方法示例
Jan 19 Python
Python Web程序部署到Ubuntu服务器上的方法
Feb 22 Python
如何利用Anaconda配置简单的Python环境
Jun 24 Python
django创建超级用户过程解析
Sep 18 Python
python matplotlib如何给图中的点加标签
Nov 14 Python
Python pandas RFM模型应用实例详解
Nov 20 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
Apr 02 Python
基于Python测试程序是否有错误
May 16 Python
解决python3安装pandas出错的问题
May 20 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
php中动态变量用法实例
2015/06/10 PHP
详解 PHP加密解密字符串函数附源码下载
2015/12/18 PHP
Yii2超好用的日期和时间组件(值得收藏)
2016/05/05 PHP
Paypal实现循环扣款(订阅)功能
2017/03/23 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
解决FireFox下[使用event很麻烦]的问题
2006/11/26 Javascript
javascript demo 基本技巧
2009/12/18 Javascript
JavaScript中出现乱码的处理心得
2009/12/24 Javascript
js静态方法与实例方法分析
2011/07/04 Javascript
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
Vue 进阶教程之v-model详解
2017/05/06 Javascript
解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
2017/06/05 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
2019/04/15 Javascript
使用原生JS实现火锅点餐小程序(面向对象思想)
2019/12/10 Javascript
python实现颜色空间转换程序(Tkinter)
2015/12/31 Python
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
2017/05/03 Python
基于Python函数的作用域规则和闭包(详解)
2017/11/29 Python
python数据分析数据标准化及离散化详解
2018/02/26 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
2018/04/20 Python
python实现定时提取实时日志程序
2018/06/22 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
2019/06/05 Python
python list数据等间隔抽取并新建list存储的例子
2019/11/27 Python
python给视频添加背景音乐并改变音量的具体方法
2020/07/19 Python
英国羊绒服装购物网站:Pure Collection
2018/10/22 全球购物
武汉瑞得软件笔试题
2015/10/27 面试题
信息技术教学反思
2014/02/12 职场文书
批评与自我批评材料
2014/02/15 职场文书
工程项目建议书范文
2014/03/12 职场文书
《开国大典》教学反思
2014/04/19 职场文书
我的祖国演讲稿
2014/05/04 职场文书
视光学专业自荐信
2014/06/24 职场文书
卫校毕业生自我鉴定
2014/09/28 职场文书
爱护环境卫生倡议书
2015/04/29 职场文书
2015年环境监察工作总结
2015/07/23 职场文书
TV动画《神废柴☆偶像》公布先导PV
2022/03/20 日漫
Python OpenGL基本配置方式
2022/05/20 Python