Python QtGui: 类 之间的变量继承

Python QtGui: inheritance of variables between classes

我是 GUI 的新手,我有一个关于变量继承的快速问题。

在我的 GUI 中,我有两个按钮,一个选择 xlsx 文件,另一个绘制它。下面第一个class设置按钮和选择文件:

class Example(QtGui.QWidget):

def __init__(self):
    super(Example, self).__init__()

    self.initUI()

def initUI(self):

    vBoxLayout = QtGui.QVBoxLayout(self)

    file_btn = QtGui.QPushButton('Select File', self)
    file_btn.clicked.connect(self.get_graph_file)

    graphing_btn = QtGui.QPushButton('Plot Graph', self)
    graphing_btn.clicked.connect(Plotting_Graph)

    self.show()

def get_graph_file(self):

    fname_graphfile = QtGui.QFileDialog.getOpenFileName(self, 'Open file', '/Users/.../', 'excel files (*.xlsx)')

...第二个应该继承fname_graphfile并绘制它(我只添加了一点绘图代码)...

class Plotting_Graph(Example):

def __init__(self):

    self.PlottingGraph()

def PlottingGraph(self):

    xl = ef(fname_graphfile[0])......

当运行时报错global name 'fname_graphfile' is not defined.

如何让第二个 class 记住我在上一个 class 中定义的内容?

fname_graphfileget_graph_file 中的局部变量,因此其他方法无法访问它,您应该做的是将其设置为实例属性,以便可以从任何方法访问它,并且然后向 Plotting_Graph.PlottingGraph 添加一个参数,该参数接受 xlsx 文件作为方法的参数,并将 self.fname_graphfile 从按钮 click

传递给它

您的最终代码应如下所示

from PyQt4 import QtCore, QtGui
import sys

class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):
        self.fname_graph_file = ''
        file_btn = QtGui.QPushButton('Select File', self)
        file_btn.setGeometry(100, 100, 150, 30)
        file_btn.clicked.connect(self.get_graph_file)

        graphing_btn = QtGui.QPushButton('Plot Graph', self)

        plot = Plotting_Graph()
        graphing_btn.clicked.connect(lambda: plot.PlottingGraph(self.fname_graph_file))

        self.show()

    def get_graph_file(self):

        self.fname_graph_file = QtGui.QFileDialog.getOpenFileName(self, 'Open file', '/home', 'excel files (*.xlsx)')

class Plotting_Graph(Example):

    def __init__(self):
        pass

    def PlottingGraph(self, fname_graphfile):

        print(fname_graphfile)
        # xl = ef(fname_graphfile[0])

app =  QtGui.QApplication([])
a = Example()
app.exec_()