sách gpt4 ăn đã đi

如何在pyqt中使用动画实现平滑滚动的QScrollArea

In lại Tác giả: Tôi là chú chim nhỏ Thời gian cập nhật: 25-01-2023 14:31:12 24 4
mua khóa gpt4 giày nike

Lời nói đầu

Trong blog trước "Cách triển khai QScrollArea cuộn mượt mà trong pyqt", chúng tôi đã sử dụng bộ tính giờ và hàng đợi để đạt được khả năng cuộn mượt mà. Tuy nhiên, mã triển khai vẫn hơi phức tạp nên blog này sẽ sử dụng khung hoạt hình QPropertyAnimation của Qt để đạt được chức năng tương tự.

Quá trình thực hiện

Thanh cuộn mượt mà

Quá trình cuộn thực chất là quá trình thay đổi giá trị() của QScrollBar. Lý do khiến QScrollArea của Qt không thể cuộn trơn tru là vì nó nhảy giữa hai giá trị() của QScrollBar trong quá trình cuộn. Nếu có thể nội suy giữa hai giá trị cuộn, chúng ta có thể đạt được thao tác cuộn mượt mà. Ở đây, chúng ta bắt đầu hoạt ảnh cuộn bằng cách ghi đè hàm setValue().

                        
                          lớp SmoothScrollBar(QScrollBar): """ Thanh cuộn mượt """ scrollFinished = pyqtSignal() def __init__(self, parent=None): QScrollBar.__init__(self, parent) self.ani = QPropertyAnimation() self.ani.setTargetObject(self) self.ani.setPropertyName(b"value") self.ani.setEasingCurve(QEasingCurve.OutCubic) self.ani.setDuration(500) self.ani.finished.connect(self.scrollFinished) def setValue(self, value: int): if value == self.value(): return # dừng hoạt ảnh đang chạy self.ani.stop() self.scrollFinished.emit() self.ani.setStartValue(self.value()) self.ani.setEndValue(value) self.ani.start() def scrollValue(self, value: int): """ cuộn theo khoảng cách đã chỉ định """ giá trị += self.value() self.scrollTo(giá trị) def scrollTo(self, value: int): """ cuộn đến vị trí đã chỉ định """ giá trị = min(self.maximum(), max(self.minimum(), value)) self.setValue(giá trị) def mousePressEvent(self, e): self.ani.stop() super().mousePressEvent(e) def mouseReleaseEvent(self, e): self.ani.stop() super().mouseReleaseEvent(e) def mouseMoveEvent(self, e): self.ani.stop() super().mouseMoveEvent(e)

                        
                      

SmoothScrollKhu Vực

Cuối cùng, bạn cần thay thế thanh cuộn mặc định của QScrollArea bằng SmoothScrollBar cuộn mượt mà:

                        
                          
lớp SmoothScrollArea(QScrollArea): """ Vùng cuộn mượt mà """ def __init__(self, parent=None): super().__init__(parent) self.hScrollBar = SmoothScrollBar() self.vScrollBar = SmoothScrollBar() self.hScrollBar.setOrientation(Qt.Horizontal) self.vScrollBar.setOrientation(Qt.Vertical) self.setVerticalScrollBar(self.vScrollBar) self.setHorizontalScrollBar(self.hScrollBar) def setScrollAnimation(self, orient, duration, easing=QEasingCurve.OutCubic): """ đặt hoạt ảnh cuộn Tham số ---------- orient: Định hướng hướng cuộn thời lượng: int thời lượng cuộn easing: QEasingCurve kiểu hoạt ảnh """ bar = self.hScrollBar nếu orient == Qt.Horizontal else self.vScrollBar bar.ani.setDuration(duration) bar.ani.setEasingCurve(easing) def wheelEvent(self, e): if e.modifiers() == Qt.NoModifier: self.vScrollBar.scrollValue(-e.angleDelta().y()) else: self.hScrollBar.scrollValue(-e.angleDelta().x())

                        
                      

Bài kiểm tra

Đây là một chương trình thử nghiệm trình xem hình ảnh đơn giản:

                        
                          # mã hóa:utf-8 nhập sys từ PyQt5.QtCore nhập QEasingCurve, Qt từ PyQt5.QtGui nhập QPixmap từ PyQt5.QtWidgets nhập QApplication, QLabel lớp Demo(SmoothScrollArea): def __init__(self): super().__init__() self.label = QLabel(self) self.label.setPixmap(QPixmap("shoko.jpg")) # tùy chỉnh hoạt ảnh cuộn self.setScrollAnimation(Qt.Vertical, 400, QEasingCurve.OutQuint) self.setScrollAnimation(Qt.Horizontal, 400, QEasingCurve.OutQuint) self.horizontalScrollBar().setValue(1900) self.setWidget(self.label) self.resize(1200, 800) if __name__ == '__main__': ứng dụng = QApplication(sys.argv) w = Demo() w.show() ứng dụng.exec_()

                        
                      

Những hình ảnh được sử dụng để thử nghiệm như sau (Nizi-chan thật dễ thương:

từ.jpg

viết ở cuối

Tại thời điểm này, việc triển khai tính năng cuộn mượt mà đã được giới thiệu. Để biết thêm các tiện ích tùy chỉnh, vui lòng tham khảo PyQt-Fluent-Widgets ở trên~~.

Cuối cùng, bài viết này về cách sử dụng hoạt ảnh để triển khai QScrollArea cuộn mượt mà trong pyqt kết thúc tại đây. Nếu bạn muốn biết thêm về cách sử dụng hoạt ảnh để triển khai QScrollArea cuộn mượt mà trong pyqt, vui lòng tìm kiếm bài viết CFSDN hoặc tiếp tục Duyệt các bài viết liên quan, tôi mong bạn sẽ ủng hộ blog của mình trong tương lai nhé! .

24 4 0
tôi là một con chim nhỏ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress