python 的 pickle 模块是一个用于序列化和反序列化 Python 对象结构的模块。它能够将对象转换成一个字节流(pickle 序列),以便可以将其存储在文件中或通过网络传输,之后可以恢复成原始对象。
基础用法
# 要序列化的对象
data = {
'a': [1, 2.5, 3, 4+4j],
'b': ("string", b'byte string'),
'c': {None, True, False}
}
# 序列化(保存对象到文件)
with open('data.pickle', 'wb') as f:
pickle.dump(data, f)
# 反序列化(从文件加载对象)
with open('dat
import os
import re
from PySide2.QtGui import QCursor, QIcon
from PySide2.QtWidgets import QVBoxLayout, QLabel, QDialog, QPushButton, QHBoxLayout, QFrame
from PySide2.QtCore import Signal, Qt, QTimer, QPoint, QSize
class DesktopLyrics(QDialog):
def __init__(self, lyrics_path='', parent=None):
super().__init__()
self.parent = pa
支持无限滚动加载数据、1秒内只能加载一次数据(根据需要设置)
from PySide2.QtWidgets import QApplication, QWidget, QVBoxLayout, QScrollArea, QLabel
from PySide2.QtCore import Qt, QTimer
class MyWidget(QWidget):
def __init__(self):
super().__init__()
# 标记是否可以更新数据
self.can_update_data = True
# 加载数据间隔(即多少毫秒内只能加载一次数据)
self.update_da
1、使用QThread进行多线程处理
创建一个继承自QThread的类,在这个类中重写run方法来执行网络请求。然后创建该类的实例,并使用start方法来触发线程,从而在后台执行网络请求,然后使用信号和槽机制将结果从工作线程传递回主线程,从而更新UI。这样可以避免网络请求阻塞主线程的UI渲染。
import sys
import requests
from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget
from PySide2.QtCore import QThread, Signal
class Worker(QThread):
# 定义
import threading
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class __FileWatchdog(FileSystemEventHandler):
def on_modified(self, event):
print(f'文件被修改: {event.src_path}')
def on_created(self, event):
print(f'文件被创建: {event.src_path}')
def on_deleted(self, event)
# 移动窗口的中心点到指定坐标
def move_to_point(self, x, y):
# 获取窗口当前的几何信息
frame_geometry = self.frameGeometry()
# 计算新的左上角位置,以使窗口中心位于 (x, y)
target_top_left = QPoint(x - frame_geometry.width() // 2,
y - frame_geometry.height() // 2)
# 移动窗口到新的左上角位置
self.move(target_top_left)
from PySide2.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel
from PySide2.QtCore import QTimer
from PySide2.QtGui import QMouseEvent
class MyWidget(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.initUI()
# 初始化两个定时器
self.enter_timer = QTimer()
self.leave_timer = QTimer
from PySide2.QtWidgets import QApplication, QFrame, QMenu, QAction, QVBoxLayout, QWidget
class MyFrame(QFrame):
def __init__(self, parent=None):
super().__init__(parent)
def contextMenuEvent(self, event):
# 创建上下文菜单
context_menu = QMenu(self)
# 添加刷新按钮
refresh_action = QAction("刷新", self)
refr
import sys
from io import BytesIO
import requests
from PySide2.QtCore import Qt, QTimer, Signal
from PySide2.QtGui import QPainter, QPixmap, QPainterPath
from PySide2.QtWidgets import QApplication, QWidget, QHBoxLayout, QPushButton
class AlbumRotatingIcon(QWidget):
album_clicked = Signal(str)
def __init__(self, parent=None, bg_img_path='',
import sys
from PySide2.QtWidgets import QApplication, QPushButton, QVBoxLayout, QWidget
from PySide2.QtGui import QMovie, QIcon
from PySide2.QtCore import QSize, QTimer
class CircularRefreshButton(QPushButton):
def __init__(self, gif_path, parent=None):
super().__init__(parent)
# 初始化 QMovie
self.movie = QMovie(gif_path)