Задача состоит в том, чтобы написать эмулятор робота. У меня есть три класса в моем коде: ControlWidget, BoardWidget и Emulator (главный виджет, который должен сочетать Control и Board в одном окне). Я собираюсь сделать несколько рисунков на BoardWidget с помощью QPainter.PyQt5: виджет не отображается после добавления в макет
class ControlWidget(QFrame):
def __init__(self):
super().__init__()
self._vbox_main = QVBoxLayout()
self.initUI()
def initUI(self):
# ... adding some buttons
self.setLayout(self._vbox_main)
self.setGeometry(50, 50, 600, 600)
self.setWindowTitle('Robot Controller')
class BoardWidget(QWidget):
def __init__(self):
super().__init__()
self._robot_pixmap = QPixmap("robo.png")
self.initUI()
def initUI(self):
self.setStyleSheet("QWidget { background: #123456 }")
self.setFixedSize(300, 300)
self.setWindowTitle("Robot Emulator")
Оба из них появляются хорошо, если показано в разных окнах:
class Emulator(QWidget):
def __init__(self):
super().__init__()
self._control = ControlWidget()
self._board = BoardWidget()
self._board.show()
self._control.show()
Но магия приходит сюда. Я хочу, чтобы мой Emulator показать как доска и управления:
class Emulator(QWidget):
def __init__(self):
super().__init__()
self._control = ControlWidget()
self._board = BoardWidget()
self.initUI()
self.show()
def initUI(self):
layout = QBoxLayout(QBoxLayout.RightToLeft, self)
layout.addWidget(self._control)
layout.addStretch(1)
layout.addWidget(self._board)
self.setLayout(layout)
self.setWindowTitle('Robot Emulator')
self.setWindowIcon(QIcon("./assets/robo.png"))
# self._board.update()
Я убил трех часов, пытаясь исправить это. Я попытался представить свою доску как QPixmap поверх QLabel внутри QBoxLayout. Я попытался заменить QBoxLayout на QHBoxLayout. Ничто не имеет никакого значения.
Вы должны установить раскладку на 'BoardWidget' и добавить виджет к нему (например, «QLabel», показывающий графическую карту робота). – ekhumoro