我正在尝试在PyQt中实现一个GUI以进行数据分析。基本上,它允许用户浏览数据的位置,并在嵌入式matplotlib环境中绘制数据。这就是我目前掌握的代码
from PyQt5 import uic, QtWidgets
import sys
import pandas as pd
import singlecurve as sc
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
dfG = []
class Ui(QtWidgets.QMainWindow):
def __init__(self):
super(Ui, self).__init__()
uic.loadUi('gui.ui', self)
self.LoadData.clicked.connect(self.getfiles)
self.LoadDataB.clicked.connect(self.getfiles)
GraphArea = PlotCanvas(self, width = 9, height = 7)
GraphArea.move(0,20)
self.ExperimentNumber.valueChanged.connect(lambda: GraphArea.plot(self.ExperimentNumber.value(), self.Smoothing.value()))
self.Smoothing.valueChanged.connect(lambda: GraphArea.plot(self.ExperimentNumber.value(), self.Smoothing.value()))
self.readyArea.setStyleSheet("background-color: yellow")
self.readyArea.setText("No Data")
def getfiles(self):
fileName, _ = QtWidgets.QFileDialog.getOpenFileName(self, 'Open file', "/Users/03abc/Desktop/python", '*.xlsm *.xls *.xlsx')
df = pd.read_excel(fileName)
global dfG
dfG = df
self.readyArea.setStyleSheet("background-color: green")
self.readyArea.setText("Ready")
class PlotCanvas(FigureCanvas):
def __init__(self, parent=None, width=5, height=4, dpi=100):
fig = Figure(figsize=(width, height), dpi=dpi)
self.axes = fig.add_subplot(111)
FigureCanvas.__init__(self, fig)
self.setParent(parent)
def plot(self, data, smoothing):
data = sc.MovingMedianCalculator(dfG.iloc[:,data], smoothing)
print(data)
print("lado")
#data = [10,20,20,50,70,90 ]
#data = [random.random() for i in range (10) ]
self.figure.clear()
ax = self.figure.add_subplot(111)
ax.plot( data, 'r-')
ax.margins(0, 0.05)
#ax.set_title('PyQt Matplotlib Example')
self.draw()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = Ui()
window.show()
sys.exit(app.exec_())
我使用一个全局变量在Ui类和Plotcanvas类之间交换数据。从我的C语言编程中,我知道如果可能的话,应该避免使用全局变量。python中似乎也是如此。一个按钮已经实现,通过点击它,用户可以浏览并选择他们想要的数据集。然后修改该数据。但我似乎不明白,让从Ui获得的数据可用于其他python类和函数的最佳方法是什么
正如您所指出的,您应该避免使用globale变量(参见Why are global variables evil?),在您的情况下,它也是不必要的,因为它足以将信息保存在类的属性中
相关问题 更多 >
编程相关推荐