Вы должны получить полезное предупреждение от Qt;если нет, убедитесь, что в вашей тестовой среде активна консоль.Предупреждение:
QLayout: Attempting to add QLayout "" to ChessWidget "", which already has a layout
Это происходит, когда вы создаете QHBoxLayout
в ChessWidget.initUI
и пытаетесь связать его с ChessWidget
.Вы уже установили QVBoxLayout
для этого виджета.
Быстрое решение - сохранить имя вашего макета (vbox
-> self.vbox
), а затем в событии щелчка удалить QPushButton
из макета и добавьте ChessWidget
.
Я понимаю, что вы просто делаете небольшие тесты для целей обучения, но этот шаблон проектирования с постоянно заменяемым QPushButton
может оказаться не тем, что вам нужно.Если вы хотите, чтобы QPushButton
и ChessWidget
занимали одно и то же место, посмотрите на QStackedWidget
.Это позволит вам переключаться с одного виджета на другой так часто, как вам нравится.Это может быть полезным, если вы хотите скрыть ChessWidget
позже, когда ни одна игра не активна, например.
Обратите внимание, что когда вы создаете свои QPushButton
и QLabel
, нет необходимости в их родительской привязкев ChessWidget
, так как они будут добавлены в макет при добавлении.