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_graphfile
是 get_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_()
我是 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_graphfile
是 get_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_()