Python 在运行时替换Qt5中的小部件
我在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删除小部件本身来删除小部件后,您还必须调用。 这是必要的,因为即使在从布局中删除小部件后,小部件仍将有一个父集合,即设置布局的小部件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
layoutItem = self.main_widget.layout().itemAt(1)
if layoutItem.widget():
layoutItem.widget().deleteLater()
或者,如果您已经有小部件的引用:
self.someWidget.deleteLater()
谢谢,我把小部件和布局项目搞混了,而且在尝试之间没有真正清理代码