PyQt QScrollArea不显示小部件

时间:2017-12-29 22:05:04

标签: python-3.x scrollbar pyqt5

我对GUI编程有点新,对PyQt来说还是新手,我正在尝试构建一个显示问题列表的GUI。我创建了一个QuestionBank类,其子类QWidget并覆盖.show()方法以正确显示列表。我已经单独测试了它并且它正常工作。但是,问题列表可能很长,所以我一直试图让它可滚动。而不是向窗口小部件添加QScrollBar,然后手动设置事件触发器,我一直在尝试基于我看到的语法QuestionBank中的QScrollArea窗口小部件在网上的例子中。滚动区域显示正常时,它根本不显示问题库,而只显示空白轮廓。

QuestionBank类看起来像这样:

class QuestionBank(QWidget):
    BUFFER = 10 # space between questions (can be modified)
    def __init__(self, parent, questions):
        # `parent` should be the QWidget that contains the QuestionBank, or None if
        # QuestionBank is top level

        # `questions` should be a list of MasterQuestion objects (not widgets)
        QWidget.__init__(self, parent)
        self.questions = [MasterQuestionWidget(self, q) for q in questions]
        self.bottomEdge = 0

    def show(self, y=BUFFER):
        QWidget.show(self)

        for q in self.questions:
            # coordinates for each each question
            q.move(QuestionBank.BUFFER, y)
            q.show()
            # update y-coordinate so that questions don't overlap
            y += q.frameGeometry().height() + QuestionBank.BUFFER
        self.bottomEdge = y + 3 * QuestionBank.BUFFER
    # ... other methods down here

我显示滚动条的代码如下所示:

app = QApplication(sys.argv)

frame = QScrollArea()
qs = QuestionBank(None, QFileManager.importQuestions())
qs.resize(350, 700)
frame.setGeometry(0, 0, 350, 300)
frame.setWidget(qs)
frame.show()
sys.exit(app.exec_())

我尝试了很多这方面的变体,包括在resize而不是frame上调用qs,删除setGeometry,并设置qs的父级} frame代替None而我不知道我哪里出错了。

如果有帮助,我正在使用PyQt5

这是没有滚动区域的问题库,看看它应该是什么样子: The question bank without a scroll area, with random questions in it

以下是滚动区域的上述代码输出: The question bank with a scroll area

代码的这种变化是唯一产生任何输出的变量,其余的只有空白窗口。我确信它缺少一些简单的东西,因为框架显然正确地调整大小,它显然知道要显示的小部件,但它没有显示整个事物。

非常感谢任何帮助,谢谢你。

0 个答案:

没有答案