Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使QWidget内容在PyQt中可滚动?_Python_Pyqt_Qt4 - Fatal编程技术网

Python 如何使QWidget内容在PyQt中可滚动?

Python 如何使QWidget内容在PyQt中可滚动?,python,pyqt,qt4,Python,Pyqt,Qt4,首先,我几个小时前开始使用PyQt。 到目前为止还不错-我正在编写rss客户端以熟悉PyQt 我得到了QApplication,QMainWindow和两个自定义小部件。 第一个自定义小部件是: class RssItem(QWidget): __pyqtSignals__ = ("articleViewed(bool)", "articleOpened(bool)", "articleMarke

首先,我几个小时前开始使用PyQt。 到目前为止还不错-我正在编写rss客户端以熟悉PyQt 我得到了
QApplication
QMainWindow
和两个自定义小部件。 第一个自定义小部件是:

class RssItem(QWidget):
    __pyqtSignals__ = ("articleViewed(bool)",
                       "articleOpened(bool)",
                       "articleMarkedGood(bool)")

    def __init__(self, title, date, parent = None):
        super(RssItem, self).__init__(parent)
        self.initWidget(title, date)

    def initWidget(self, title, date):
        title = QLabel(title)
        date = QLabel(date)
        titleBox = QHBoxLayout()
        titleBox.addWidget(title)
        titleBox.addWidget(date)
        self.setLayout(titleBox)
在单行中显示(目前)标题和日期 第二个接受
RssItem
小部件的数组,并在垂直列表中显示它们:

class ItemsList(QWidget):
    def __init__(self, items, parent=None):
        super(ItemsList, self).__init__(parent)
        self.initWidget(items)

    def initWidget(self, items):
        listBox = QVBoxLayout(self)
        for item in items:
            listBox.addWidget(item)
            listBox.addStretch(1)
        self.setLayout(listBox)
如何使此列表可滚动? 保持在中间我计划在一个窗口中有多个
项目列表
,每个都应该有自己的滚动条

目前,应用程序的主要功能仅用于测试这两个小部件:

class MainApp(Qt.QApplication):
    def __init__(self, args):
        super(MainApp, self).__init__(args)
        self.addWidgets()
        self.exec_()

    def addWidgets(self):
        self.window = MainWindow()


class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.initUI()

    def initUI(self):
        self.statusBar().showMessage("ok")
        self.resize(640, 480)
        self.setWindowTitle("Smart Rss")
        items=[]
        for x in range(0, 200):
            items.append(RssItem("Title no %s" % x, "2000-1-%s" %x))
        self.setCentralWidget(ItemsList(items))
        self.show()

编辑:越来越近,将
ItemList.initWidget
更改为

def initWidget(self, items):
    scroll= QScrollArea(self)
    wrap = QWidget(self)
    listBox = QVBoxLayout(self)
    for item in items:
        listBox.addWidget(item)
        listBox.addStretch(1)
    wrap.setLayout(listBox)
    scroll.setWidget(wrap)

但现在我不知道如何使
qscrollara
填满所有可用空间,并在更改时自动调整大小。

尝试
滚动。setwidgetsizeable(True)
如下所示:

def initWidget(self, items):
    listBox = QVBoxLayout(self)
    self.setLayout(listBox)

    scroll = QScrollArea(self)
    listBox.addWidget(scroll)
    scroll.setWidgetResizable(True)
    scrollContent = QWidget(scroll)

    scrollLayout = QVBoxLayout(scrollContent)
    scrollContent.setLayout(scrollLayout)
    for item in items:
        scrollLayout.addWidget(item)
    scroll.setWidget(scrollContent)