Имеем:
1. Окно (QMainWindow)
2. Центральный виджет (QWidget) в котором п.3
3. Два QVBoxLayout. Один вложен в другой
4. Куча динамически создающихся QLabel во внутреннем слое
Необходимо прокручивать содержимое внутреннего слоя.
Можно не кодом, а последовательностью действий, ибо я просто не могу понять принцип работы всей этой конструкции. Говорят, слои должны сами за этим следить, но что-то нифига скроллбар не появляется сам
Код прилагается:
# -*- coding: utf-8 -*-
import file_handler
import sys
from PyQt4 import QtGui, QtCore
class View_log (QtGui.QMainWindow):
log = file_handler.read_file('log.yml')
def __init__ (self):
QtGui.QMainWindow.__init__(self, None)
self.setWindowTitle(u'Просмотр лога')
self.setFixedSize(500, 600)
self.center()
self.create_widgets()
def create_widgets (self):
general_sizer = QtGui.QVBoxLayout()
all_entry_sizer = QtGui.QVBoxLayout()
scroll_area = QtGui.QScrollArea()
scroll_area.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
for id in self.log:
entry = self.log[id]
one_entry_sizer = QtGui.QVBoxLayout()
info_student = entry[0].decode('utf-8')
info_group = entry[1].decode('utf-8')
info_theme = entry[2].decode('utf-8')
info_grade = entry[3]
student = QtGui.QLabel('%s: %s' % (u'Студент', info_student))
group = QtGui.QLabel('%s: %s' % (u'Группа', info_group))
theme = QtGui.QLabel('%s: %s' % (u'Тема', info_theme))
grade = QtGui.QLabel('%s (%%): %s' % (u'Оценка', info_grade))
one_entry_sizer.addWidget(student)
one_entry_sizer.addWidget(group)
one_entry_sizer.addWidget(theme)
one_entry_sizer.addWidget(grade)
one_entry_sizer.addStretch(1)
all_entry_sizer.addLayout(one_entry_sizer)
id += 1
exit_button = QtGui.QPushButton(u'Выход')
exit_button.clicked.connect(self.close)
#general_sizer.addLayout (all_entry_sizer)
general_sizer.addWidget(exit_button)
scroll_area.setLayout(all_entry_sizer)
#scroll_area.setLayout(general_sizer)
self.setCentralWidget(scroll_area)
def center (self):
screen = QtGui.QDesktopWidget().screenGeometry()
size = self.geometry()
self.move((screen.width() - size.width()) / 2,
(screen.height() - size.height()) / 2)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = View_log()
window.show()
app.exec_()