PyQt:如何创建一个可滚动窗口

问题描述:

我认为在PyQt中创建一个可滚动窗口应该容易得多。 我有一个窗口标签列表,我想向下滚动查看它们。目前的代码不给我一个错误,但窗口只是不出现:PyQt:如何创建一个可滚动窗口

class Example(QWidget): 

    def __init__(self): 
     super().__init__() 

     layout = QVBoxLayout() 

     lbl_arr = makeLabelArr() 

     for i in range(1,8): 
      qb = lbl_arr[i] 
      # qb.setFixedWidth(300) 
      layout.addWidget(qb) 

     layout.setAlignment(Qt.AlignTop) 

     scroll = QScrollArea() 
     scroll.setWidget(self) 
     scroll.setWidgetResizable(True) 
     scroll.setFixedHeight(400) 

     layout.addWidget(scroll) 

     self.setLayout(layout) 


     self.setGeometry(0, 0, 600, 220) 
     self.setWindowTitle('SnP watchlist') 

     self.show() 


if __name__ == '__main__': 

    app = QApplication(sys.argv) 
    #print(QDesktopWidget().availableGeometry()) 

    ex = Example() 
    sys.exit(app.exec_()) 
+0

请修复您的代码段的缩进 – Wasi

使该窗口本身就是一个QScrollArea,像这样:

class Window(QScrollArea): 
    def __init__(self): 
     super(Window, self).__init__() 
     widget = QWidget() 
     layout = QVBoxLayout(widget) 
     layout.setAlignment(Qt.AlignTop) 
     for index in range(100): 
      layout.addWidget(QLabel('Label %02d' % index)) 
     self.setWidget(widget) 
     self.setWidgetResizable(True) 

你应该加入scroll bar小部件后置layout

class Example(QWidget): 

    def __init__(self): 
     super().__init__() 

     layout = QVBoxLayout() 

     lbl_arr = makeArrayOfLabelsHTML() 

     for i in range(1,8): 
      qb = lbl_arr[i] 
      layout.addWidget(qb) 

     layout.setAlignment(Qt.AlignTop) 

     scroll = QScrollArea() 
     scroll.setWidget(self) 
     scroll.setWidgetResizable(True) 
     scroll.setFixedHeight(400) 
     layout.addWidget(scroll) 

     # set layout after adding scroll bar 
     self.setLayout(layout) 

     self.setGeometry(0, 0, 600, 220) 
     self.setWindowTitle('SnP watchlist') 

     self.show() 



if __name__ == '__main__': 

     app = QApplication(sys.argv) 
     #print(QDesktopWidget().availableGeometry()) 

     ex = Example() 
     sys.exit(app.exec_()) 
+0

感谢这一点,但仍,窗口显示不出来,即使我做不会收到错误 – user3755529