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

Class GridWidget

QFlowLayout/HotPlaylist.py:44–126  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers 1

__init__Method · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected