2016-09-22 34 views
0

我想保存/存儲在app.exec()運行時創建的鼠標事件值。我想用下面的代碼,我從我有麻煩現在發現後得到了。(會不會帶鏈接更新發布,其中該代碼,一旦我找到它來了。)如何保存app.exec()在python中退出後使用的值?

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

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應用程序的進一步處理。

+0

非常感謝。我還沒有時間,但顯然這是我缺乏面向對象的知識。這個週末我必須花時間來刷新我的OOP。非常感謝。 –

相關問題