gpt4 book ai didi

python - PyQt5 : widget not displayed after being added to layout

转载 作者:太空宇宙 更新时间:2023-11-03 15:41:35 25 4
gpt4 key购买 nike

任务是编写一个机器人模拟器。我的代码中有三个类:ControlWidget、BoardWidget 和 Emulator(应将 Control 和 Board 组合在一个窗口中的主要小部件)。我将使用 QPainter 在 BoardWidget 上绘制一些图片。

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()

That's the result...

但是魔法就在这里。我希望我的模拟器同时显示主板和控件:

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()

And the board's background disappears...

我花了三个小时试图修复它。我试图将我的板作为 QPixmap 呈现在 QBoxLayout 内的 QLabel 上。我尝试用 QHBoxLayout 替换 QBoxLayout。没有任何区别。

最佳答案

正如@ekhumoro在评论中所说,有必要将QPixmap添加到QLabel,然后将其设置在BoardWidget布局上具有 setLayout() 函数的管理器。

一个解决方案可能是 BoardWidget 类的下一个重新实现:

class BoardWidget(QWidget):
def __init__(self):
super().__init__()
self._robot_pixmap = QPixmap("robo.png")
self.label = QLabel()
self.label.setPixmap(self._robot_pixmap)
self._vbox_board = QVBoxLayout()
self.initUI()

def initUI(self):
self._vbox_board.addWidget(self.label)
self.setLayout(self._vbox_board)
self.setStyleSheet("QWidget { background: #123456 }")
self.setFixedSize(300, 300)
self.setWindowTitle("Robot Emulator")

结果如下所示:

关于python - PyQt5 : widget not displayed after being added to layout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42076300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com