PyQt 自定义小部件未显示

2023-12-13

我是 PyQt 的新手。

我试图将 QTableView 放入一个类中,这样我就可以在类中定义它的行为,而无需将其与所有其他代码混合,但是当我这样做时,它就不会显示。

这是我正在学习的代码。这是借来的[使用 QAbstractTableModel 在 pyqt 中编辑表]。稍微重新调整它以与 Qt5 一起使用,并将 QTableView 移动到一个类中

import sys
from PyQt5 import QtGui, QtCore
from PyQt5.QtGui import *
from PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication, QVBoxLayout, QTableView, QWidget
from PyQt5.QtCore import *

# données à représenter
my_array = [['00','01','02'],
            ['10','11','12'],
            ['20','21','22']]

def main():
    app = QApplication(sys.argv)
    w = MyWindow()
    w.show()
    sys.exit(app.exec_())

# création de la vue et du conteneur
class MyWindow(QWidget):
    def __init__(self, *args):
        QWidget.__init__(self, *args)

        tablemodel = MyTableModel(my_array, self)
        table = Table(tablemodel)

        layout = QVBoxLayout(self)
        layout.addWidget(table)
        self.setLayout(layout)

# création du modèle

class Table(QWidget):
    def __init__(self, model):
        super().__init__()
        self.model = model
        self.initUI()

    def initUI(self):
        self.setMinimumSize(300,300)
        self.view = QTableView()
        self.view.setModel(self.model)


class MyTableModel(QAbstractTableModel):
    def __init__(self, datain, parent = None, *args):
        QAbstractTableModel.__init__(self, parent, *args)
        self.arraydata = datain

    def rowCount(self, parent):
        return len(self.arraydata)

    def columnCount(self, parent):
        return len(self.arraydata[0])

    def data(self, index, role):
        if not index.isValid():
            return None
        elif role != Qt.DisplayRole:
            return None
        return (self.arraydata[index.row()][index.column()])

    """
    def setData(self, index, value):
        self.arraydata[index.row()][index.column()] = value
        return True
    def flags(self, index):
        return Qt.ItemIsEditable
    """    

if __name__ == "__main__":
    main()

如果我删除该类并使用

table = QTableView()
table.setModel(tablemodel)

表显示没有问题。

我缺少什么?


你定义的Tableas a QWidget有一个属性self.view=QTableView。 但你没有定义布局Table,因此它将显示为一个空的小部件。

您要么必须定义一个布局Table,并将视图添加到其中,或者直接将视图添加到主窗口的布局中:

class MyWindow(QWidget):
    def __init__(self, *args):
        QWidget.__init__(self, *args)

        tablemodel = MyTableModel(my_array, self)
        table = Table(tablemodel)

        layout = QVBoxLayout(self)
        layout.addWidget(table.view)  #add view instead of table
        self.setLayout(layout)

第三种方法是改变定义Table: 你可以子类化QTableView代替QWidget(代码未测试):

class Table(QTableView):
    def __init__(self, model, parent):
        super(Table,self).__init__(parent)
        self.setMinimumSize(300,300)
        self.setModel(model) 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PyQt 自定义小部件未显示 的相关文章

随机推荐

  • 使用 PHP 将表单数据从一个网页传递到另一个网页

    我在这里发现了一些类似的问题 但从答案中我没有完全了解应该如何工作 我在页面中有一个订阅表格
  • 实施 30 天计时试验 [已关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 独立 Mac 开发者的问题 如何以非邪恶的方式实施 30 天计时赛 在首选项中放
  • 如何在JAVA中将两个int合并为一个double?

    如果我有 int a 123 int b 456 如何得到 double c 123 456 这个怎么样 int a 123 int b 456 double c Double parseDouble a b
  • 使用具有固定页眉和页脚的 css 可变内容 div 高度

    我在使用 CSS 时遇到了一些问题 正在向这个精彩的社区寻求帮助 我正在尝试构建一个包含以下元素的布局 1 标题区 2 页脚区域 3 左侧窗格 4 内容区 我提出了以下 CSS 但我不认为这是完成我需要的操作的最佳方式 请在下面找到我正在寻
  • 设计时编辑器支持控件集合

    我想向组件添加一个表示控件集合的属性 并有一个集合编辑器 通过它我可以轻松选择属于该集合的控件 VS确实almost我想要的自动使用以下代码 Private controls As New List Of Control
  • PHP 将 Excel 导出到特定路径?

    是否可以将 PHP MySQL Excel 工作表导出到指定路径 例如 U 盘 这是因为我使用 php 作为销售点 我现在想要的只是单击一个按钮 它将从 MySQL 数据库收集记录并将其作为 excel 或 csv 文件导出到 USB 闪存
  • 具有两个 Y 轴的分组箱线图

    我想使用 GGPLOT2 为同一类别制作两个具有不同信息的箱线图 具有两个 Y 轴 如下图所示 我有区域 AM 和 AR 的两个类别信息 旋转速度和角度 并且我想将这两种运动模式组合在根据区域分组的图形中 到目前为止我的代码如下所示 are
  • C#:0 和 1 排列

    我想列出仅包含 0 和 1 的排列 与二进制类似 但允许可变长度 不必等于 8 长度 例如 0 1 00 01 10 11 000 001 010 011 100 101 110 111 一直到满足X的长度为止 如何才能做到这一点 您还可以
  • “git Remote show origin”:为什么所有分支都显示“已跟踪”,即使有些分支没有?

    为什么 git remote show origin 将远程分支列为 已跟踪 即使这些分支没有链接到本地 分支进行拉 推 在这种情况下 跟踪 还有其他含义吗 我认为这就是 跟踪 的全部含义 关于分支跟踪的 git 文档 1 克隆一个具有多个
  • 如何保持 Google Chrome 扩展弹出窗口打开?

    如果我打开扩展程序弹出窗口 那么我会打开另一个窗口或选项卡 如果我返回弹出窗口 则弹出窗口不会保持打开状态 有没有办法强制它使弹出窗口保持打开状态 As a user 您目前无法强制弹出窗口保持打开状态 这是 UI 团队做出的 UI 决定
  • 使 my_average(a, b) 与定义了 f_add 和 d_div 的任何 a 和 b 一起使用。以及内置函数

    简而言之 我想要的是我编写的大多数数学函数 例如 my average a b 与任何a and b其中一个f add and f div已被定义 不过载 和 且不中断my average built in type built in ty
  • 根据组中唯一/不同值的数量创建二进制变量

    我有数据如下 userID lt c 1 1 1 2 2 2 3 3 3 product lt c a a a b b c a b c df lt data frame userID product 对于每个 userID 我想创建一个二进
  • file_get_contents():SSL 操作失败,代码为 1(证书验证失败)

    我已经安装了 WAMP 3 0 4 并尝试编写一个连接到外部 HTTPS Web 服务的 PHP 脚本 但这会返回错误 警告 file get contents SSL 操作失败 代码为 1 OpenSSL 错误消息 错误 14090086
  • .NET 阻塞套接字读取直到 X 字节可用?

    假设我通过 TCP 实现了简单的协议 其中每条消息由以下部分组成 An int表示数据长度 二进制数据 长度在 1 中指定 读这样的消息我想要这样的东西 int length input ReadInt byte data input Re
  • Three.js - 用于碰撞检测的精确光线投射

    我正在使用 Three js 版本68 我使用与此人在这里使用的相同的方法进行碰撞检测 这在大多数情况下都很棒 向作者表示深深的 感谢 http stemkoski github io Three js Collision Detectio
  • Python 3 虚拟环境问题

    我遇到了类似的问题这个帖子 但我已经在运行最新版本的virtualenv我也得到了不同的ImportError 使用 virtualenv 版本 2 7 默认 工作正常 但我需要将 python3 用于另一个项目 我安装它使用brew in
  • 根据对象中键的值对数组中的对象进行分组

    我有以下数据 我想根据日期进行排序 不包括时间戳 NOTE 我可以访问moment为了这个任务 我的数据如下所示 const data fixture AC v Inter kickOffTime 2018 06 14T15 00 00Z
  • 根据分隔符分多列打印文件

    这似乎是一个简单的任务 但是使用 duckduckgo 我无法找到一种方法来正确地完成我想要做的事情 主要问题是 如何使用分隔符将 linux 或 bash 中命令的输出拆分为多列 我有一个如下所示的文件 这只是一个简化的示例 Some d
  • java8中列表的迭代列表[重复]

    这个问题在这里已经有答案了 我想知道 我们如何使用 Java 8 中的流 API 迭代多级列表 例如 List
  • PyQt 自定义小部件未显示

    我是 PyQt 的新手 我试图将 QTableView 放入一个类中 这样我就可以在类中定义它的行为 而无需将其与所有其他代码混合 但是当我这样做时 它就不会显示 这是我正在学习的代码 这是借来的 使用 QAbstractTableMode