问题的本质:
- 有一个主模块“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)时,"•"会打印一个点或只是一些字符。
为了让您的场景图形元素能够发出信号,您不仅需要从 QGraphicsPixmapItem 继承它,还需要从 QGraphicsObject 继承它:
接下来,像往常一样:
决定了!
声明表格小部件类时,会生成一个自定义信号(在classes.py模块中):
在这里,在这个类中,我在覆盖的鼠标事件中规定了一个信号模拟:
在主模块(interface.py )中,在主块中,我以图形的形式(通过整个祖先/后代树)编写了 table 信号与 slot 的连接:
在classes.py模块的图形视图块中,我编写了相应的插槽/函数:
通过不同的模块/文件在窗口小部件之间传递信号就像发条一样。