Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在运行时替换Qt5中的小部件_Python_Widget_Pyqt5_Qt5_Runtime - Fatal编程技术网

Python 在运行时替换Qt5中的小部件

Python 在运行时替换Qt5中的小部件,python,widget,pyqt5,qt5,runtime,Python,Widget,Pyqt5,Qt5,Runtime,我在python3.8中制作了这个Qt5 GUI。它的左侧有一个QButtonGroup。按下其中一个按钮应该会显示相关的设备QWidget类,该类在右侧没有显示。 因此,主布局中只有两个小部件 这段代码运行。我知道这个功能在设备中没有真正的意义,但它只是为了有一个小的工作代码片段来演示 导入日志记录 导入系统 从PyQt5.qtwidts导入QApplication、QButtonGroup、QHBoxLayout、QTabBar、QTabWidget、, QMainWindow、QPushB

我在python3.8中制作了这个Qt5 GUI。它的左侧有一个QButtonGroup。按下其中一个按钮应该会显示相关的设备QWidget类,该类在右侧没有显示。 因此,主布局中只有两个小部件

这段代码运行。我知道这个功能在设备中没有真正的意义,但它只是为了有一个小的工作代码片段来演示

导入日志记录 导入系统 从PyQt5.qtwidts导入QApplication、QButtonGroup、QHBoxLayout、QTabBar、QTabWidget、, QMainWindow、QPushButton、QVBoxLayout、QWidget、QLabel logging.basicConfig 格式=%asctimes,%msecsd-%names-%levelnames:%messages, datefmt=%H:%M:%S, 级别=logging.INFO, 设备=[DEV1,QLabel,2222,QLabel,HUPP,QLabel,FOOO,QLabel,BOOO,QLabel] 类MainAppQMainWindow: MainAppQMainWindow的文档 定义初始自我: 超级__ self.logger=logging.getLoggerMAIN self.logger.info正在启动主程序 self.title=标题 self.left=300 self.top=200 自宽=1100 自身高度=600 self.init_用户界面 def init_uiself->None: 初始化用户界面 self.logger.info正在启动用户界面 self.setWindowTitleself.title self.setGeometryself.left、self.top、self.width、self.height self.main_widget=QWidget self.setCentralWidgetself.main\u小部件 布局=QHBoxLayout self.main\u widget.setLayoutlayout dev_布局=QVBoxLayout self.devices=QButtonGroup 对于枚举设备中的i、t、w: btn=QPushButtont self.devices.addButtonbtn,i dev_layout.addWidgetbtn self.devices.button点击[int]。连接self.device\u点击 layout.addLayoutdev_布局,10 layout.addWidgetQLabeltest,90 self.prev\u设备\u id=0 self.devices.button0.setDownTrue def设备单击自身,btn\U id:int->None: self.logger.infofBTN{btn_id}已单击 self.devices.buttonself.prev_device_id.setdownflse self.devices.buttonbtn\u id.setDownTrue replace为我的对象提供了一个AttributeError:“QHBoxLayout”对象没有属性“replace” self.main\u widget.layout.replaceDEVICES[self.prev\u device\u id][1],DEVICES[btn\u id][1] self.main_widget.layout.takeAt1 self.main\u widget.layout.addWidgetDEVICES[btn\u id][1]DEVICES[btn\u id][0],90 self.main_widget.layout.update self.prev\u device\u id=btn\u id 如果uuuu name uuuuu==\uuuuuuuu main\uuuuuuuu: app=QApplicationsys.argv main=MainApp 主要节目 app.exec_ 我现在的问题是,旧的小部件没有被删除,新的小部件被放置在上面,同时显示它们

是因为MainApp是一个QMainWindow,并且有一个self.main_widget=QWidget centralWidget吗?是否建议使用setCentralWidget?

仅从布局中删除布局项,而不删除其小部件。请注意,我指定了布局项,因为布局使用抽象项,布局使用抽象项来管理其内容:布局项可以包含布局本身或小部件

在任何情况下,通过删除布局项或使用removeWidget删除小部件本身来删除小部件后,您还必须调用。 这是必要的,因为即使在从布局中删除小部件后,小部件仍将有一个父集合,即设置布局的小部件

    layoutItem = self.main_widget.layout().itemAt(1)
    if layoutItem.widget():
        layoutItem.widget().deleteLater()
或者,如果您已经有小部件的引用:

    self.someWidget.deleteLater()

谢谢,我把小部件和布局项目搞混了,而且在尝试之间没有真正清理代码