| 127 | |
| 128 | |
| 129 | class Window(QScrollArea): |
| 130 | |
| 131 | def __init__(self, *args, **kwargs): |
| 132 | super(Window, self).__init__(*args, **kwargs) |
| 133 | self.resize(800, 600) |
| 134 | self.setFrameShape(self.NoFrame) |
| 135 | self.setWidgetResizable(True) |
| 136 | self.setAlignment(Qt.AlignCenter) |
| 137 | self._loadStart = False |
| 138 | # 网格窗口 |
| 139 | self._widget = GridWidget(self) |
| 140 | self._widget.loadStarted.connect(self.setLoadStarted) |
| 141 | self.setWidget(self._widget) |
| 142 | # 连接竖着的滚动条滚动事件 |
| 143 | self.verticalScrollBar().actionTriggered.connect(self.onActionTriggered) |
| 144 | # 进度条 |
| 145 | self.loadWidget = QSvgWidget(self, |
| 146 | minimumHeight=120, |
| 147 | minimumWidth=120, |
| 148 | visible=False) |
| 149 | self.loadWidget.load('Data/Svg_icon_loading.svg') |
| 150 | |
| 151 | def setLoadStarted(self, started): |
| 152 | self._loadStart = started |
| 153 | self.loadWidget.setVisible(started) |
| 154 | |
| 155 | def onActionTriggered(self, action): |
| 156 | # 这里要判断action=QAbstractSlider.SliderMove,可以避免窗口大小改变的问题 |
| 157 | # 同时防止多次加载同一个url |
| 158 | if action != QAbstractSlider.SliderMove or self._loadStart: |
| 159 | return |
| 160 | # 使用sliderPosition获取值可以同时满足鼠标滑动和拖动判断 |
| 161 | if self.verticalScrollBar().sliderPosition() == self.verticalScrollBar( |
| 162 | ).maximum(): |
| 163 | # 可以下一页了 |
| 164 | self._widget.load() |
| 165 | |
| 166 | def resizeEvent(self, event): |
| 167 | super(Window, self).resizeEvent(event) |
| 168 | self.loadWidget.setGeometry( |
| 169 | int((self.width() - self.loadWidget.minimumWidth()) / 2), |
| 170 | int((self.height() - self.loadWidget.minimumHeight()) / 2), |
| 171 | self.loadWidget.minimumWidth(), self.loadWidget.minimumHeight()) |
| 172 | |
| 173 | |
| 174 | if __name__ == "__main__": |