我想保存/存储在app.exec()运行时创建的鼠标事件值。我想使用以下代码,这些代码是我从现在找不到的帖子中得到的。(一旦我找到它,将更新链接以发布此代码的来源。)
import sys
from PyQt4 import QtGui, QtCore
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import numpy as np
class DrawImage(QMainWindow):
def __init__(self,fName, parent=None):
## Default values
self.x = 0
self.y = 0
super(QMainWindow, self).__init__(parent)
self.setWindowTitle('Select Window')
self.local_image = QImage(fName)
self.local_grview = QGraphicsView()
self.setCentralWidget( self.local_grview )
self.local_scene = QGraphicsScene()
self.image_format = self.local_image.format()
#self.pixMapItem = self.local_scene.addPixmap( QPixmap(self.local_image) )
self.pixMapItem = QGraphicsPixmapItem(QPixmap(self.local_image), None, self.local_scene)
self.local_grview.setScene( self.local_scene )
self.pixMapItem.mousePressEvent = self.pixelSelect
def pixelSelect( self, event ):
# print(event.pos().x(), event.pos().y())
self.x = event.pos().x()
self.y = event.pos().y()
print(self.x, self.y)
def main():
# Initialize
fName = "N2-600-PSI-V1-40-30ms-1.tiff"
app = QtGui.QApplication(sys.argv)
form = DrawImage(fName)
form.show()
app.exec_()
x,y = app.exec_()
print(x,y)
return
if __name__ == '__main__':
main()
我的第一次尝试是创建两个全局变量,然后我在pixelSelect函数中使用它来保存event.pos()。x()和。()y中的值。
但这有效...最终我想通过app.exec()循环传递不止一组坐标...(进程??它是一个奇怪的野兽)
因此,从这一点开始,我尝试了几种不同的方法将数组传递到app.exec()以保存更多值。到目前为止,我得到的最好结果是使用全局数组并尝试在DrawImage类中进行for循环。
任何指针都会很棒:)
有一个好的!
答案 0 :(得分:0)
app.exec_()
没有做任何神奇的事情,它只是启动处理所有GUI事件的事件循环。您的主要功能将在此处阻止,直到GUI关闭并且事件循环退出。此时,您创建的对象仍然在范围内,也就是说,它们没有被垃圾回收,它们无法做任何依赖于Qt事件循环的事情。
您只需访问DrawImage
的成员即可获取所需内容。
from PyQt4 import QtCore, QtGui
class DrawImage(QtGui.QMainWindow):
def __init__(self, fname, **kwargs):
super(DrawImage, self).__init__(**kwargs)
self.setWindowTitle('Select Window')
scene = QtGui.QGraphicsScene()
gview = QtGui.QGraphicsView()
gview.setScene(scene)
self.setCentralWidget(gview)
image = QtGui.QImage(fname)
pixmapitem = QtGui.QGraphicsPixmapItem(QtGui.QPixmap(image), None, scene)
pixmapitem.mousePressEvent = self.pixelSelect
self.points = []
def pixelSelect(self, event):
x, y = event.pos().x(), event.pos().y()
self.points.append((x, y))
print x, y
if __name__ == '__main__':
fname = 'N2-600-PSI-V1-40-30ms-1.tiff'
app = QtGui.QApplication([])
form = DrawImage(fname)
form.show()
app.exec_()
for point in form.points:
print point
据推测,您希望实际使用应用程序生成的值做某事,而不是仅仅打印它们。没有理由不能(并且你应该!)在Qt应用程序中处理任何进一步的处理。