如何保存app.exec()退出python后使用的值?

时间:2016-09-22 00:05:07

标签: python qt user-interface pyqt

我想保存/存储在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循环。

任何指针都会很棒:)

有一个好的!

1 个答案:

答案 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应用程序中处理任何进一步的处理。