RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1214495
Accepted
Павел
Павел
Asked:2021-12-05 22:40:02 +0000 UTC2021-12-05 22:40:02 +0000 UTC 2021-12-05 22:40:02 +0000 UTC

PyQT5。如何将动态创建的 QGraphicsPixmapItem 的信号传递给 QTableWidget?

  • 772

问题的本质:

  • 有一个主模块“interface.py”,它被启动并内置了窗口设计。
  • 还有一个“classes.py”模块,其中包含对象类和重新定义的函数。

这个类中有一些class MyOBJ(QGraphicsPixmapItem)对象在程序执行期间动态创建,每个新对象都会响应鼠标事件。自然地,它们在里面QGraphicsScene并且QgraphicsView。

来自classes.py的短代码:

class MyOBJ(QGraphicsPixmapItem):
    def __init__(self):
        super().__init__()
        self.setPixmap(QPixmap('dot.png'))
    def mousePressEvent(self, event):
        pass  # тут всякие разные конструкции
    super().mousePressEvent(event)

有一个class MyTableFrames(QTableWidget)从中创建的类对象位于内部QDockWidget,它又是QMainWindow“interface.py”模块中的主窗口小部件

来自classes.py的短代码:

class MyTableFrames(QTableWidget):
    def __init__(self):
        super().__init__()
        self.setColumnCount(7500)
        self.horizontalHeader().setDefaultSectionSize(20)
        self.horizontalHeader().setMinimumSectionSize(20)
        self.setRowCount(1)
        self.setSelectionMode(QAbstractItemView.SingleSelection)
        self.setRowHeight(0, 36)
        self.setEditTriggers(QTableWidget.NoEditTriggers)

    def mousePressEvent(self, event):
        print('Ok')
        super().mousePressEvent(event)

    def mouseReleaseEvent(self, event):
        if event.button() == 1:
            self.setItem(self.currentRow(), self.currentColumn(), QTableWidgetItem("•"))
        super().mouseReleaseEvent(event)

问题是我不明白如何从 to 发送鼠标事件MyOBJ,MyTableFrames所以当你点击MyOBJ表格中的给定单元格MyTableFrames(让它为 1)时,"•"会打印一个点或只是一些字符。

python
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Alexander Chernin
    2021-12-08T16:14:21Z2021-12-08T16:14:21Z

    问题是我不明白如何将鼠标事件从 MyOBJ 传递给 MyTableFrames,这样当鼠标点击 MyTableFrames 表中的 MyOBJ 时,给定的单元格

    为了让您的场景图形元素能够发出信号,您不仅需要从 QGraphicsPixmapItem 继承它,还需要从 QGraphicsObject 继承它:

    class MyOBJ(QGraphicsObject, QGraphicsPixmapItem):
        clicked = pyqtSignal()
        def __init__(self):
            QGraphicsObject.__init__(self) # self передаем только сюда!
            QGraphicsPixmapItem.__init__(None) # а здесь просто конструируем
    
        def mousePressEvent(self, event):
            # Испускаем сигнал
            self.clicked.emit()
    

    接下来,像往常一样:

    myObj = MyOBJ()
    myObj.clicked.connect( ... )
    
    • 1
  2. Best Answer
    Павел
    2021-12-08T06:58:27Z2021-12-08T06:58:27Z

    决定了!

    声明表格小部件类时,会生成一个自定义信号(在classes.py模块中):

    class MyTableFrames(QTableWidget):
        TF_sign = pyqtSignal()  # сигнал для передачи в граф.вид
        def __init__(self):
    

    在这里,在这个类中,我在覆盖的鼠标事件中规定了一个信号模拟:

    def mouseReleaseEvent(self, event):
        self.TF_sign.emit()  # создаем сигнал для граф.вида
    

    在主模块(interface.py )中,在主块中,我以图形的形式(通过整个祖先/后代树)编写了 table 信号与 slot 的连接:

    if __name__ == '__main__':
        App = QApplication(sys.argv)
        window = Window()
        # передаем сигналы в слоты
        window.tl_frames_table.TF_sign.connect(window.graphicView.tab_sel_slot)
        sys.exit(App.exec())
    

    在classes.py模块的图形视图块中,我编写了相应的插槽/函数:

    class MyGraphicsView(QGraphicsView):
        def __init__(self)
        def tab_sel_slot(self):  # слот приема сигнала от таблицы кадров
            print('signal OK')
    

    通过不同的模块/文件在窗口小部件之间传递信号就像发条一样。

    • 0

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5