2016-04-11 9 views
0

Ich bin sehr neu zu GUIs und ich habe eine kurze Frage zur Vererbung von Variablen.Python QtGui: Vererbung von Variablen zwischen Klassen

In meiner GUI habe ich zwei Tasten, eine wählt eine xlsx-Datei, die andere Grafiken es. Die erste class unten stellt die Tasten und wählt die Datei:

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)') 

... und der zweite sollte fname_graphfile erben und grafisch darstellen es (ich habe nur in einem Bit des Graphik-Code hinzugefügt) ...

Wenn ausgeführt, gibt es einen Fehler global name 'fname_graphfile' is not defined.

Wie bekomme ich die zweite class, um sich an etwas zu erinnern, das ich in der vorherigen class definiert habe?

Antwort

1

fname_graphfile ist eine lokale Variable in den get_graph_file so anderen Methoden haben keinen Zugriff auf das, was Sie tun sollen, ist ihm eine Instanz Attribut machen, so dass es von jedem Verfahren zugegriffen werden kann und dann ein Argument Plotting_Graph.PlottingGraph hinzufügen, dass die akzeptiert xlsx Datei als Parameter an die Methode und übergeben self.fname_graphfile, um es von der Schaltfläche klicken

Ihre endgültige Code wie folgt

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_() 

aussehen sollte
Verwandte Themen