当前位置: 首页 > 后端技术 > Python

pyqt5QScrollArea设置在自定义端(任何地方)

时间:2023-03-26 00:24:13 Python

本例主要思路是设置垂直向左滚动使用一个长度为0的mid_frame,height为要设置的qwidget的高度,使用mid_frame的moveEvent事件驱动move的移动qwidget*fromsysimportargv#主窗口类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()defresizeEvent(self,e):#resize改变滚动窗口的高度使其与自身相同self.scroll.resize(self.scroll.width(),self.height())#需要带滚动条的窗口classMainFrame(QFrame):def__init__(self,father):super().__init__(father)self.father=fatherself.setGeometry(50,50,100,1500)#Testbuttonforiinrange(15):b=QPushButton(str(i),self)b.setGeometry(0,i*100,100,100)#自定义车轮事件defwheelEvent(self,e):如果e.angleDelta().y()>0:self.move(self.x(),self.y()+60)else:self.move(self.x(),self.y()-60)#改变滚动值self.father.scroll.bar.setValue(abs(self.y()))defresizeEvent(self,e):#resize将mid_frame的高度更改为与其自身相同self.father.scroll.mid_frame.setGeometry(0,0,0,self.height())#承载scrollarea的窗口classScrollFrame(QFrame):def__init__(self,father,parent,pos_x):super().__init__(father)self.parent_,self.father,self.pox_x=parent,father,pos_xself.mid_frame=MidFrame(self)self.mid_frame.setGeometry(0,0,0,self.parent_.height())self.scroll=QScrollArea()#实例化垂直条改变滚动值self.bar=self.scroll.verticalScrollBar()#绑定中间窗口self.scroll.setWidget(self.mid_frame)#自动隐藏和出现self.scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)#添加到宿主框架layout=QGridLayout(self)layout.addWidget(self.scroll,0,0)self.setLayout(layout)#将携带帧的大小设置为与滚动区域相同self.setGeometry(pos_x,0,20,self.father.height())defresizeEvent(self,e):#resize将滚动的高度更改为self.scroll.setGeometry(0,0,20,self.height())#接受滚动事件的中间窗口classMidFrame(QFrame):def__init__(self,father):super().__init__(father)self.father=fatherdefmoveEvent(self,e):#移动事件绑定实际滚动窗口的移动self.father.parent_.move(self.father.parent_.x(),e.pos().y())app=QApplication(argv)main=Main()app.exec_()这个例子的效果: