在runtim替换widget

2024-04-23 22:22:06 发布

您现在位置:Python中文网/ 问答频道 /正文

情况是这样的。我有一个类,它是从QListView派生出来的,它添加了一些方便的函数,如果您愿意,它是一个自定义小部件。我不想为了使用我的widget而与设计师角力。我只想在设计器中使用一个普通的QlistView(作为占位符)并用pyuic4编译它。在运行时,我想用我自己的版本替换普通的QListView。在

你怎么能这么做?在

我希望init中类似这样的东西能起作用:

self.lstView1 = MyListView

但它没有。。。在


Tags: 函数self版本init部件情况widget设计师
2条回答

问题是您实际上只是简单地替换lstView1所指向的对象,而不是将其添加到小部件中。也就是说,当您创建对象时,只需告诉python使用lstView1指向新对象,但实际的UI使用的是旧指针,因为它已经添加了。在

我假设您已经使用py4uci将ui文件转换为python,并将gui设置为:

class ExambleUI(QtGUi.QDialog, UI_Example):
   def __init__(self, parent):
       QtGui.QDiialog.__init__(self, parent)
       self.setupUI(self)
       self.lstView1 = MyListView

因为setupUi是在您更改lstView的值之前执行的,所以您无法获得新的小部件。你只需要换行:

^{pr2}$

另一方面,我建议您遵循这个tutorial并在设计器中创建和使用您的widget,它既简单又快速。在

使用QLayout replace函数:

ui->main_layout->replace(oldWidget, newWidget);

相关问题 更多 >