python-3.x - 将 Qwidgest 动态添加到 QGroupbBox
问题描述
我想动态地将 QLabel 之类的 QWidgets 添加到 QGroupBox 中。并且 groupbox 的布局不应该设置为绝对定位(我不想要布局)。如果在将 Qgroupbox 添加到 MainWindow 布局之前将 QWidget 添加到 QGroupBox,它会起作用并显示在窗口上。当我尝试像 addWidget 函数中显示的那样动态添加 Qlabel 之类的 QWidget 时,它不会显示小部件。我错过了一点吗?
class DropableGroupBox(QtWidgets.QGroupBox):
def __init__(self,*args):
super().__init__(*args)
self.setAcceptDrops(True)
def dragEnterEvent(self, event):
if event.mimeData().hasText():
event.acceptProposedAction()
def dropEvent(self, event):
pos = event.pos()
text = event.mimeData().text()
event.acceptProposedAction()
class ResultWindow(DropableGroupBox):
def __init__(self,*args):
super().__init__(*args)
self.groupBox = QtWidgets.QGroupBox()
self.groupBox.setStyleSheet("background-color:yellow;")
#labelx = DraggableLabel("Label", self.groupBox)
vLay = QtWidgets.QVBoxLayout()
vLay.addWidget(self.groupBox)
self.setLayout(vLay)
def dropEvent(self, event):
text = event.mimeData().text()
Curpos =self.mapFromGlobal(QtGui.QCursor().pos())
self.addWidget(text,Curpos)
event.acceptProposedAction()
def addWidget(self,text,pos):
if text=="label":
labelx = DraggableLabel("Label",self)
labelx.move(50,50)
labelx.setStyleSheet("background-color:red")
print("Here is")
解决方案
你错过了两件重要的事情:
- 如果您想在不使用布局管理器的情况下添加子小部件,则必须设置父小部件(可能在构造函数中),否则它将被视为顶级小部件,并将与自己的窗口一起显示;
- 如果小部件未添加到布局管理器中,则必须显式显示它,如果它没有父级,或者父级已经显示(如您的情况);
def addWidget(self,text,pos):
if text=="label":
labelx = DraggableLabel("Label", self)
labelx.move(50,50)
labelx.setStyleSheet("background-color:red")
labelx.show()
推荐阅读
- eclipse - 如何将源文件附加到他们的 eclipse 插件依赖 jar 以查看 javadocs?
- pygame - 为什么pygame的功能在重启时不起作用?(如何重置 pygame 功能?)
- reactjs - 如何使用无头 js 在本机反应中实现后台任务,以便 fetch api 在所有 3 种状态下无限运行
- sql - 在整数列上使用 Like 运算符进行过滤
- python - ModuleNotFoundError import seaborn as sns
- ansible - win shell 删除前检查文件是否存在
- excel - 如何在 Excel 中转换表格格式布局
- ruby - 无法在 gem 中调用方法
- angular - 如何在FormGroup中单击按钮时获取复选框值
- r - 通过 R 中事件的时间进行生存分析中的情节分裂