Я пытаюсь вызвать переменную из класса MainWindow в другой класс диалогового окна, я знаю, что этот вопрос задавали раньше, но я пробовал все ответы, и я не мог заставить его работать, поскольку я все еще начинаю с python.Вызвать переменную из другого класса в python
Мой код, как показано ниже, (переменная, которую я хочу назвать это self.Value
, учитывая, что мне это нужно, чтобы быть в то же время как петля):
from PyQt4 import QtCore, QtGui
import sys
import time
from threading import Event, Thread
from mainwindow import Ui_MainWindow
from savedialog import Ui_saveDialog
from plot import Plot
from PyQt4.Qt import QString, QFileDialog
from pylab import *
import threading
#DH11 tempSensor Library
import Adafruit_DHT
#Library to find FFT and FFTshift
from scipy.fftpack import fft, fftshift
from numpy import linspace
#Library to find Max and Min
from operator import itemgetter
class dataAcquisition(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(dataAcquisition, self).__init__(parent)
#threading.Thread.__init__(self)
self.setupUi(self)
self.startButton.clicked.connect(self.startButton_clicked)
self.th = Thread(target = self.runValue)
self.popSave = saveDialog()
self.status = False
def runValue(self):
Fs = 8000
N = 256
f = linspace(-Fs/2, Fs/2, N)
X = []
Y = []
MaxMin = []
self.i = 0.0
ax1 = subplot(2, 1, 1)
Line1 = plot(0,0,'r-')[0]
ax2 = subplot(2, 1, 2)
Line2 = plot(f,0*f,'r-')[0]
self.status = True
while (self.status):
self.Value = Adafruit_DHT.read_retry(11, 4)[1]
X.append(self.i)
Y.append(self.Value)
FFT = log10(abs(fft(Y, N)))
FFT = fftshift(FFT)
Line1.set_xdata(X)
Line1.set_ydata(Y)
ax1.relim()
ax1.autoscale_view()
Line2.set_ydata(FFT)
ax2.relim()
ax2.autoscale_view()
for k in Y:
for MM in range(int(k)):
MaxMin.append(MM)
self.MaxValue = max(MaxMin)
self.MinValue = min(MaxMin)
self.i += 0.10
pause(0.01)
self.lcdNumber_value.display(self.Value)
self.lcdNumber_MaxValue.display(self.MaxValue)
self.lcdNumber_MinValue.display(self.MinValue)
def startButton_clicked(self):
self.th.start()
self.popSave.show()
class saveDialog(QtGui.QDialog, Ui_saveDialog):
def __init__(self, parent=None):
super(saveDialog, self).__init__(parent)
flags = QtCore.Qt.Drawer | QtCore.Qt.WindowStaysOnTopHint
self.setWindowFlags(flags)
self.setupUi(self)
self.checkBox.stateChanged.connect(self.Unlimited_NOVs)
self.saveOkButton.clicked.connect(self.acceptOKButtonClicked)
self.NOVs = 0.0
self.spinBox.valueChanged.connect(self.spinBox_value_changed)
def Unlimited_NOVs (self, state):
if state == QtCore.Qt.Checked:
self.NOVs = 5
def spinBox_value_changed (self):
self.NOVs = self.spinBox.value()
def acceptOKButtonClicked(self):
#Here I want to call self.Value
i = 1
while True:
Name = QtGui.QFileDialog.getSaveFileName(self, 'Save File', 'sessionData.txt')
self.fName = open(Name %i ,"w")
i += 1
c = 1
while c <= self.NOVs:
c += 1
self.fName.write(str(self.Value))
self.fName.write("\n")
else:
self.fName.close()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
MainWindow = dataAcquisition()
MainWindow.show()
sys.exit(app.exec_())
'в то время как true' заморозит вашу программу. – furas
отправьте это значение непосредственно в качестве параметра в 'def __init __ (self, parent = None, value):' или try 'parent.Value', но вам нужно отправить родителя в Dialog' self.popSave = saveDialog (self) ' – furas
Вы можете объясните, что вы хотите делать, так как не понимаете свою логику. – eyllanesc