从python中的另一个类调用变量

罗法

我正在尝试从MainWindow类到Dialog的另一个类中调用变量,我知道之前曾问过这个问题,但是我尝试了所有给定的答案,但由于我仍然是python的初学者,因此我无法使其正常工作。

我的代码如下((我想调用的变量是self.Value,考虑到我需要将它放在同一While循环中):

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_())
简单的

您可以发送parent到对话框,然后可以访问主窗口-self.parent.Value

但是,__init__如果要在对话框中使用变量,则应在其中创建一些默认值的变量__init__

顺便说一句:我们使用CamelCase类的名称-即。QPushButton并且DataAcquisitionSaveDialog

from PyQt4 import QtCore, QtGui
from PyQt4.Qt import QString, QFileDialog
from threading import Event, Thread
import sys
import time

class DataAcquisition(QtGui.QMainWindow):

    def __init__(self, parent=None):
        super(DataAcquisition, self).__init__(parent)

        self.startButton = QtGui.QPushButton(self, text="Show Dialog")
        self.startButton.clicked.connect(self.startButton_clicked)

        self.th = Thread(target = self.runValue)

        # create variable with default value
        self.Value = "Hello World!"

        # send parent (self) to Dialog
        self.popSave = SaveDialog(self)

    def runValue(self):
        self.Value = 0
        while True:
            self.Value += 1
            time.sleep(1)

    def startButton_clicked(self):
        self.th.start()      
        self.popSave.show()

class SaveDialog(QtGui.QDialog):

    def __init__(self, parent=None):
        super(SaveDialog, self).__init__(parent)

        vbox = QtGui.QVBoxLayout()

        # this value is get when Dialog is create, not when is executed `show()`
        # so it gets default value "Hello World!"
        self.label = QtGui.QLabel(self, text=self.parent().Value)
        vbox.addWidget(self.label)

        self.button = QtGui.QPushButton(self, text="Update label")
        self.button.clicked.connect(self.button_clicked)
        vbox.addWidget(self.button)

        self.setLayout(vbox)

    def button_clicked(self):
        # get current value from parent
        self.label.setText(str(self.parent().Value))

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    MainWindow = DataAcquisition()
    MainWindow.show()
    sys.exit(app.exec_())

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在另一个项目Eclipse中调用类

如何从另一个类中迅速调用另一个方法?

在另一个类中调用实例变量

Python从类中的另一个函数调用一个函数

在一个类中调用一个函数,在另一个类python中调用一个函数

可以调用一个使用类中另一个方法的变量的方法吗?

从另一个类(在另一个模块中)调用自变量

从Python的另一个类内部调用方法

如何使用或调用在另一个类中声明的静态变量

从Python 2.7中的另一个类方法调用一个类方法

PHP在另一个类中调用公共变量

使用Java从另一个类调用变量

调用另一个文件中的类和函数以编辑该类中的变量

在另一个类中调用一个通过IBaction读取动态变量的函数

从python中的另一个函数调用变量

从另一个函数中调用类函数

在Python中从一个类到另一个类访问变量

Python-从另一个类调用函数

在python的同一类中的另一个方法中调用一个类的方法

HaxeFlixel:如何在另一个类中调用getter / setter变量

修改类中的变量以调用另一个类的函数

在另一个类中调用 AlertDialog

调用在 python 中另一个类中声明的类

从另一个变量调用类中的变量

从另一个文件中的另一个函数调用变量

Python:在另一个类中调用一个类

如何从 C# 中的另一个类调用变量(移动应用程序)

无法从 Java Android Studio 中的另一个类调用变量

python,从另一个类调用方法