pyqt - 加载用户数据,如何避免使用全局变量?

时间:2014-11-16 01:08:48

标签: python pyqt global-variables

我使用PyQt5创建一个相当简单的UI,允许用户打开数据文件夹,然后根据需要绘制该数据的不同部分。不过,关于如何在选择"导入数据"之后制作导入的数据,我有点卡住了。按钮可用于窗口小部件的其他部分,而不使用全局

代码

class DataViewer(QtWidgets.QWidget):
    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        self.setupUI(self)

    def setupUI(self, Form):
        Form.resize(1742, 988)
        Form.setContextMenuPolicy(QtCore.Qt.PreventContextMenu)
        Form.setWindowTitle("Data Viewer")

        self.windowLayout = QtWidgets.QHBoxLayout(Form)
        self.windowLayout.setObjectName("horizontalLayout_window")

        self.leftColumn = QtWidgets.QVBoxLayout()
        self.leftColumn.setObjectName("leftColumnLayout")

        self.treeWidget = QtWidgets.QTreeWidget(Form)
        self.treeWidget.setObjectName("treeWidget")

        self.loadDataFolder_btn = QtWidgets.QPushButton("Load Data Folder", Form)
        self.loadDataFolder_btn.setObjectName("loadDataFolder_btn")

        self.loadDataFolder_btn.clicked.connect(self.load_data_folder)

        self.leftColumn.addWidget(self.treeWidget)
        self.leftColumn.addWidget(self.loadDataFolder_btn)

        self.line = QtWidgets.QFrame(Form)
        self.line.setFrameShape(QtWidgets.QFrame.VLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")

        self.plotWidget = QtWidgets.QGraphicsView(Form)
        self.plotWidget.setObjectName("plotWidget")

        self.windowLayout.addLayout(self.leftColumn)
        self.windowLayout.addWidget(self.line)
        self.windowLayout.addWidget(self.plotWidget, QtCore.Qt.AlignCenter)

    def load_data_folder(self):
        folder = QtWidgets.QFileDialog.getExistingDirectory(self)
        df = pvi.import_folder(folder)

注意 - pvi.import只是我编写的另一个模块的函数,它处理我们的数据收集软件生成的数据文件。

我确信有一种明显的方法可以做到这一点,但我对此非常陌生(随时随地学习)。

由于

1 个答案:

答案 0 :(得分:0)

您可以使用DataViewer实例作为命名空间来存储导入的数据,而不是使用全局:

def load_data_folder(self):
    folder = QtWidgets.QFileDialog.getExistingDirectory(self)
    self.df = pvi.import_folder(folder)

然后,可以通过self的任何其他方法通过DataViewer访问数据。