您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關pyqt5中QScrollArea設置在任何位置的方法,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
本例設置為垂直左側scroll
主要思想是利用一個長度為0的mid_frame,高度為待設置qwidget的高度,用mid_frame的moveEvent事件驅動qwidget的move
我項目的效果圖:
代碼及注釋
from PyQt5.Qt import * from sys import argv # 主窗口 class Main(QMainWindow): def __init__(self): super().__init__(None) self.setGeometry(500, 500, 500, 500) # 實例化 self.main = MainFrame(self) self.scroll = ScrollFrame(self, self.main, 40) self.show() def resizeEvent(self, e): # resize改變scroll窗口的高度使其與自己相同 self.scroll.resize(self.scroll.width(), self.height()) #需要配備scroll的窗口 class MainFrame(QFrame): def __init__(self, father): super().__init__(father) self.father = father self.setGeometry(50, 50, 100, 1500) # 測試按鈕 for i in range(15): b = QPushButton(str(i), self) b.setGeometry(0, i*100, 100, 100) # 自定義滾輪事件 def wheelEvent(self, e): if e.angleDelta().y() > 0: self.move(self.x(), self.y() + 60) else: self.move(self.x(), self.y() - 60) # 改變scroll的值 self.father.scroll.bar.setValue(abs(self.y())) def resizeEvent(self, e): # resize改變mid_frame的高度使其與自己相同 self.father.scroll.mid_frame.setGeometry(0, 0, 0, self.height()) # 承載scrollarea的窗口 class ScrollFrame(QFrame): def __init__(self, father, parent, pos_x): super().__init__(father) self.parent_, self.father, self.pox_x = parent, father, pos_x self.mid_frame = MidFrame(self) self.mid_frame.setGeometry(0, 0, 0, self.parent_.height()) self.scroll = QScrollArea() # 實例化verticalbar以供改變scroll的值 self.bar = self.scroll.verticalScrollBar() # 綁定中間窗口 self.scroll.setWidget(self.mid_frame) # 自動隱藏和出現 self.scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) # 加入到承載frame layout = QGridLayout(self) layout.addWidget(self.scroll, 0, 0) self.setLayout(layout) # 設置承載fram的size和scrollarea一樣 self.setGeometry(pos_x, 0, 20, self.father.height()) def resizeEvent(self, e): # resize改變scroll的s高度使其與自己一樣 self.scroll.setGeometry(0, 0, 20, self.height()) # 接受scroll事件的中間窗口 class MidFrame(QFrame): def __init__(self, father): super().__init__(father) self.father = father def moveEvent(self, e): # move事件綁定實際滾動窗口的move self.father.parent_.move(self.father.parent_.x(), e.pos().y()) app = QApplication(argv) main = Main() app.exec_()
本例效果:
關于“pyqt5中QScrollArea設置在任何位置的方法”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。