Я написал программу, которая создает графический интерфейс с использованием PyQt. Из Qt Designer у меня есть MainWindow, QTabWidget внутри этого и QScrollArea внутри QTabWidget. Я пытаюсь динамически построить список совпадений с данными сопоставления, добавить каждое соответствие в макет виджетов и поместить этот макет в QScrollArea. В настоящее время мой код делает это отлично, за исключением того, что возникает следующее сообщение об ошибке:Замените макет QScrollArea новым
QLayout: Attempting to add QLayout "" to MainWindow "MainWindow", which already has a layout
Это имеет смысл для меня, но я не понимаю, как это исправить. Я даже не уверен, что у меня есть то, что он делает, что затрудняет исправление.
Внутри моего метода MainWindow __init__()
, я делаю экземпляр класса MatchHistoryBuilder (который строит каждый матч), вызвать метод buildMatchHistory() (который находится в классе MainWindow), и передать ему, что экземпляр MatchHistoryBuilder, как это:
matchHistoryBuilder = MatchHistoryBuilder(self)
self.buildMatchHistory(matchHistoryBuilder)
Вот мой метод buildMatchHistory:
def buildMatchHistory(self, matchHistoryBuilder):
# This method takes whatever matches are in match_history.txt, calls MatchHistoryBuilder.buildMatch() on each,
# and builds the GUI objects for the match history into the matchHistoryScrollArea.
# Globals: self.mainWindow
# Open match_history.txt and read json data into matchHistoryData
fileLocation = os.path.realpath(os.path.join(os.getcwd(), os.path.dirname(__file__)))
fileLocation = fileLocation + '\match_history.txt'
with open(fileLocation, 'r') as f:
matchHistoryData = json.load(f)
matchHistoryData = matchHistoryData["matches"]
# Scroll Area Properties
matchHistory = self.ui.matchHistoryScrollArea
matchHistory.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
matchHistory.setWidgetResizable(True)
# Container Widget
widget = QWidget()
# Layout of Container Widget
layout = QVBoxLayout(self)
for matchIndex, matchInstance in enumerate(matchHistoryData):
matchId = matchInstance["matchId"]
match = matchHistoryBuilder.buildMatch(summonerId, matchIndex, matchId)
layout.addWidget(match)
widget.setLayout(layout)
matchHistory.setWidget(widget)
MatchHistoryBuilder.buildMatch() возвращает QGroupBox правильно.
Как я могу сделать этот метод правильно построением каждого объекта соответствия, добавить их в QVBoxLayout и добавить QVBoxLayout в мою QScrollArea?