我对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
代码的这种变化是唯一产生任何输出的变量,其余的只有空白窗口。我确信它缺少一些简单的东西,因为框架显然正确地调整大小,它显然知道要显示的小部件,但它没有显示整个事物。
非常感谢任何帮助,谢谢你。