MCPcopy Index your code
hub / github.com/PyQt5/PyQt / GridWidget

Class GridWidget

QGridLayout/HotPlaylist.py:42–143  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

40
41
42class GridWidget(QWidget):
43 Page = 0
44 loadStarted = pyqtSignal(bool)
45
46 def __init__(self, *args, **kwargs):
47 super(GridWidget, self).__init__(*args, **kwargs)
48 self._layout = QGridLayout(self, spacing=20)
49 self._layout.setContentsMargins(20, 20, 20, 20)
50 # 异步网络下载管理器
51 self._manager = QNetworkAccessManager(self)
52 self._manager.finished.connect(self.onFinished)
53
54 def load(self):
55 if self.Page == -1 or self.Page > 10:
56 return
57 self.loadStarted.emit(True)
58 # 延迟一秒后调用目的在于显示进度条
59 QTimer.singleShot(1000, self._load)
60
61 def _load(self):
62 print("load url:", Url.format(self.Page * 35))
63 url = QUrl(Url.format(self.Page * 35))
64 req = QNetworkRequest(url)
65 req.setRawHeader(b"User-Agent", Agent)
66 self._manager.get(req)
67
68 def onFinished(self, reply):
69 # 请求完成后会调用该函数
70 req = reply.request() # 获取请求
71 iwidget = req.attribute(QNetworkRequest.User + 1, None)
72 path = req.attribute(QNetworkRequest.User + 2, None)
73 html = reply.readAll().data()
74 reply.deleteLater()
75 del reply
76 if iwidget and path and html:
77 # 这里是图片下载完毕
78 open(path, "wb").write(html)
79 iwidget.setCover(path)
80 return
81 # 解析网页
82 self._parseHtml(html)
83 self.loadStarted.emit(False)
84
85 def splist(self, src, length):
86 # 等分列表
87 return (src[i:i + length] for i in range(len(src)) if i % length == 0)
88
89 def _parseHtml(self, html):
90 # print(html)
91 # encoding = chardet.detect(html) or {}
92 # html = html.decode(encoding.get("encoding","utf-8"))
93 html = HTML(html)
94 # 查找所有的li list_item
95 lis = html.xpath("//ul[@id='m-pl-container']/li")
96 # print(lis)
97 if not lis:
98 self.Page = -1 # 后面没有页面了
99 return

Callers 1

__init__Method · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected