Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >向QTreeWidget列中的PyQt5中添加自定义小部件

向QTreeWidget列中的PyQt5中添加自定义小部件
EN

Stack Overflow用户
提问于 2022-05-10 01:34:16
回答 1查看 425关注 0票数 1

我希望有一个包含分层项的QTreeWidget,其中一个列包含一个自定义小部件。我创建了一个自定义小部件,它在水平布局中包含一个QLabel和一个QSpinBox。

MySlider.py看起来是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from PyQt5 import QtWidgets 
from PyQt5 import QtCore 
from PyQt5.Qt import Qt 
import sys

class MySlider(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(self.__class__, self).__init__(parent)
        
        self.horizontalLayoutWidget = QtWidgets.QWidget(parent)
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)

        self.label = QtWidgets.QLabel(self.horizontalLayoutWidget)
        self.label.setText('Spinbox:')
        self.spinBox1 = QtWidgets.QSpinBox(self.horizontalLayoutWidget)

        self.horizontalLayout.addWidget(self.label)
        self.horizontalLayout.addWidget(self.spinBox1)

然后,我想创建一个QTreeWidget,其中第三列填充了一个MySlider小部件。应用程序如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import sys
from PyQt5 import QtWidgets, QtCore
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QAbstractItemView
from MySlider import MySlider

def main():
    _translate = QtCore.QCoreApplication.translate
    app = QtWidgets.QApplication(sys.argv)
    tree = QtWidgets.QTreeWidget()
    tree.setColumnCount(3)
    headerItem = QtWidgets.QTreeWidgetItem()
    headerItem.setText(0, _translate("MainWindow", "md-name"))
    headerItem.setText(1, _translate("MainWindow", "md_value"))
    headerItem.setText(2, _translate("MainWindow", "others"))
    tree.setHeaderItem(headerItem)

    parent = QtWidgets.QTreeWidgetItem(tree)
    parent.setText(0, "Parent 1")
    parent.setText(1, "")
    parent.setFlags(parent.flags() | Qt.ItemIsTristate | Qt.ItemIsEditable)

    for x in range(3):
        child = QtWidgets.QTreeWidgetItem(parent)
        child.setFlags(child.flags() | Qt.ItemIsEditable)
        child.setText(0, "Child {}".format(x))
        line_edit = QtWidgets.QLineEdit(tree)

        rs = MySlider(tree)
        tree.setItemWidget(child, 1, line_edit)
        tree.setItemWidget(child, 2, rs)

    tree.setEditTriggers(QAbstractItemView.AllEditTriggers)
    tree.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

问题是:自定义小部件没有按需要放置在第三列中,而是显示在窗口的左上角。有人知道为什么会出错吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-10 03:58:12

MySlider类的定义有几个问题。

首先,您不应该将self.__class__super结合使用。在某些情况下,它可能会导致不可重构的递归,而且在任何情况下,在Python3中向super传递参数都是完全不必要的。

其次,不需要为布局创建内部小部件,也不应该将其作为parent参数传递给传入的对象(这实际上导致小部件在错误的位置显示)。

最后,您可能需要对布局进行一些调整,以确保自定义小部件不会占用太多空间,并且它的子部件扩展到适当的大小。

下面是这个类应该看到的样子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class MySlider(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        layout = QtWidgets.QHBoxLayout(self)
        # keep only the default margin on the left
        layout.setContentsMargins(-1, 0, 0, 0)
        self.label = QtWidgets.QLabel()
        self.label.setText('Spinbox:')
        self.spinBox1 = QtWidgets.QSpinBox()
        # make sure the spin-box doesn't get too small
        self.spinBox1.setMinimumWidth(80)
        layout.addWidget(self.label)
        layout.addWidget(self.spinBox1)
        # don't allow the spin-box to exapnd too much
        layout.addStretch()

如果您希望使用旋转框展开来填充整个列,则可以省略最后一行并执行以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        # make sure the spin-box fills the whole column
        layout.addWidget(self.spinBox1, 1)

注意,在上面的代码中,子部件没有被赋予一个显式的父部件。每当将小部件添加到布局中时,Qt将自动将它们重新父级到最终包含布局的小部件中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72183924

复制
相关文章
python pyqt5 QTreeWidget 动态添加节点
import sys from PyQt5.QtWidgets import *
用户5760343
2019/07/23
5.5K0
python pyqt5 QTreeWidget 动态添加节点
qtreewidget基本使用_qtreewidget列宽自适应
1、void QTreeWidget::setHeaderLabels(const QStringList & labels)
全栈程序员站长
2022/11/10
1.9K0
qtreewidget基本使用_qtreewidget列宽自适应
python pyqt5 QTreeWidget
import sys from PyQt5.QtWidgets import * from PyQt5.QtGui import QIcon, QBrush, QColor from PyQt5.QtCore import Qt
用户5760343
2019/07/23
1K0
python pyqt5 QTreeWidget
如何在Power Query中批量添加自定义列
一般情况下,我们如果需要添加列,可以一列一列根据需要进行添加,那如果我们需要根据固定的需求进行批量添加,那如何操作呢?
逍遥之
2020/03/24
8.3K1
如何在Power Query中批量添加自定义列
python pyqt5 QTreeWidget 点击事件
from PyQt5.QtWidgets import * import sys
用户5760343
2019/07/23
3.2K0
python pyqt5 QTreeWidget 点击事件
Qt中自定义QTreeWidget实现节点拖拽复制功能[通俗易懂]
QT中在QWidget支持拖拽功能,QTreeWidget继承自QWidget,所以自然也具有节点的拖拽功能。
全栈程序员站长
2022/11/14
4.5K0
Qt中自定义QTreeWidget实现节点拖拽复制功能[通俗易懂]
【说站】python PyQt向工具栏添加小部件
在某些情况下,您会发现在工具栏中添加特定的小部件(如旋转框、组合框或其他)非常有用。一个常见的例子是大多数文本处理器使用的组合框,允许用户改变文档的字体或所选文本的大小。
很酷的站长
2022/11/24
4660
java如何向数组中添加元素[数组的添加]
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说java如何向数组中添加元素[数组的添加],希望能够帮助大家进步!!!
Java架构师必看
2022/04/06
7.8K0
asp.net中的Gridview控件添加序号列
在这种方法中,如果使用gridview控件自带的分页功能添加序号列后,每一页的序号都会从1开始。
全栈程序员站长
2022/08/09
1.7K0
Spring 中的 @Import 注解及向容器中添加 Bean 的几种方式
这次介绍一下 Spring 中的一个重要的注解 @Import 以及向容器中添加 Bean 的几种方式 ,该注解在 SpringBoot 自动转配中起到重要的作用。
wsuo
2020/07/30
1.7K0
接口测试|Fiddler会话栏中添加IP列
1、点击菜单栏rules——customize rules…或者在右侧响应栏中点击FiddlerScript栏;如下图:
霍格沃兹测试开发Muller老师
2023/02/01
7040
Qt Designer基本控件介绍——Item Views(表项视图)和Item Widgets(部件)
两者的关系: Item Views(Model-Based)类内的控件是Item Widgets(Item-Based)内对应控件的父类, 如QTreeWidget是从QTreeView派生的。 ---- 两者的区别: Item Views(Model-Based)的对象进行数据操作相对比较复杂,但处理及展示大数据量时性能高; Item Widgets的数据操作比较简单,但处理及展示大数据量时性能相对低。Item Widgets在开发中没有Item Views灵活,实际上Item Widgets就是在It
Elsa_阿尼
2021/07/09
6.5K0
Qt Designer基本控件介绍——Item Views(表项视图)和Item Widgets(部件)
向mysql配置文件中添加日志配置
socket = usr/local/lnmp/mysql-5.7.21/mysql.sock
93年的老男孩
2019/12/18
3K0
【答疑】RS软件中的部件安装
谢谢!
EdenChen
2018/07/25
5280
【答疑】RS软件中的部件安装
Python 中如何向列表或数组添加元素
然而,与其它编程语言不同,数组在 Python 中不是一个内置的数据结构。Python 使用列表取代传统的数组。
Python学习者
2023/09/11
4050
点击加载更多

相似问题

显示小部件外部的额外列的布局中的PyQt5 QTreeWidget

14

PyQt5 QtreeWidget :如何在QtreeWidgetItem中访问自定义小部件的方法?

17

如何在QTreeWidget中设置小的列宽?

117

QTreeWidget -小部件列的宽度

211

向QTreeWidget添加行

25
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文