Python 打开重复运行两次的文件对话框

Python 打开重复运行两次的文件对话框,python,pandas,pyqt5,openfiledialog,Python,Pandas,Pyqt5,Openfiledialog,我尝试在PyQt5中为pandas dataframe使用QFileDialog打开两种不同类型的文件,但在执行之前,每个文件都会重复打开两次。然而,当我只使用特定的文件名时,它将直接执行一次 使用以下代码将其打开两次: class dataframe(QWidget): def __init__(self, parent=None): super(dataframe, self).__init__(parent) layout = QVBoxLayou

我尝试在PyQt5中为pandas dataframe使用
QFileDialog
打开两种不同类型的文件,但在执行之前,每个文件都会重复打开两次。然而,当我只使用特定的文件名时,它将直接执行一次

使用以下代码将其打开两次:

class dataframe(QWidget):
    def __init__(self, parent=None):
        super(dataframe, self).__init__(parent)

        layout = QVBoxLayout(self)
        canvas = mycanvas(self)
        layout.addWidget(canvas)

        self.btn3 = QPushButton("Plot")
        self.btn3.clicked.connect(canvas.PlotChart)
        layout.addWidget(self.btn3)


    def input(self):
        lasdata = QFileDialog.getOpenFileName(self, 'Open LAS', r'data/', "LAS files (*.las)")[0]
        textdata = QFileDialog.getOpenFileName(self, 'Open Text', r'data/', "Text files (*.txt)")[0]

        l = lasio.read(f"{lasdata}")
        data = l.df()
        data = data.replace('-999.00000', np.nan)
        data.index.names = ['DEPT']
        w = l.well.WELL.value
        data['WELL'] = w


        text = pd.read_csv(f"{textdata}", sep='\t')
        text_unit = text['RU'].unique()

        data_w = pd.DataFrame()
        for i in range(len(text_unit)):
            top = text.iloc[i]['D']
            if i < len(text_unit) - 1:
                bottom = text.iloc[i + 1]['D']
            else:
                bottom = int(round(data.tail(1).index.item()))
            data_int = data.iloc[top:bottom, :]
            data_int['INT'] = text.iloc[i]['RU']
            data_w = data_w.append(data_int)
        data = data_w

        return w, data


    def det(self, gr):
        w, data = dataframe.input(self)

        GR = data.iloc[:, gr]

        conditions = [
            (GR <= 60),
            (GR >= 60)]
        lit = ['A', 'B']
        data['L'] = np.select(conditions, lit, default='Undefined')
        return data


    def calculation(self):
        w, data = dataframe.input(self)
        data = dataframe.det(self, 1)

        data_well = pd.DataFrame()
        data_int = pd.DataFrame()
        F_w = pd.DataFrame()
        Fa = pd.DataFrame()
        text_unit = data['INT'].unique()

        for i in range(len(text_unit)):
            data_int = data.where(data['INT'] == text_unit[i]).dropna()
            F_percent = data_int['L'].value_counts(normalize=True) * 100
            F_percent = F_percent.sort_index()
            F_percent['INT'] = text_unit[i]
            F_percent = pd.DataFrame(F_percent).transpose()
            F_w = F_w.append(F_percent)
        F_w['W'] = w
        Fa = Fa.append(F_w)
        F_w = pd.DataFrame()

        Fa = Fa.reset_index()
        Fa = Fa.fillna(0)

        return Fa


class mycanvas(FigureCanvas):
    def __init__(self, parent=None, dpi=120):
        self.fig = plt.Figure(dpi=dpi)
        FigureCanvas.__init__(self, self.fig)

    def PlotChart(self):
        outputs = dataframe.calculation(self)  # .where(Fa['W']==well)
        int = outputs['INT'].unique()

        self.axes = self.fig.add_subplot(111)
        self.axes.set_title("AA")
        outputs.plot.barh(x='INT', stacked=True, ax=self.axes)
        self.axes.set_yticks(range(len('INT')), 'INT')
        self.draw()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = dataframe()
    window.show()
    sys.exit(app.exec_())
        def Input(self):
                lasdata = 'data/AA.las'
                textdata = 'data/AATEXT.txt'
            
                l = lasio.read(lasdata)
                data = l.df()
            
                text = pd.read_csv(textdata, sep='\t')
文件对话框代码是否有问题,例如它成功执行了一次较低的代码(直接名称),但在读取下一个代码之前,它在文件对话框中打开了两次。我需要制作GUI应用程序,所以我需要使用文件对话框

这是代码的一部分,有两个按钮:

    self.btn1 = QPushButton("LAS File")
    self.btn1.clicked.connect(self.las)
    self.btn2 = QPushButton("Text File")
    self.btn2.clicked.connect(self.text)
    self.btn3 = QPushButton("Plot")
    self.btn3.clicked.connect(canvas.PlotChart)
    layout.addWidget(self.btn1)
    layout.addWidget(self.btn2)
    layout.addWidget(self.btn3)


def las(self):
    self.lasfile = QFileDialog.getOpenFileName(self, 'Open LAS', r'data/', "LAS files (*.las)")[0]

def text(self):
    self.textfile = QFileDialog.getOpenFileName(self, 'Open Text', r'data/', "Text files (*.txt)")[0]

def input(self):
    lasdata = self.lasfile
    textdata = self.textfile

    l = lasio.read(f"{lasdata}")
    data = l.df()
    data = data.replace('-999.00000', np.nan)
    data.index.names = ['DEPT']
    w = l.well.WELL.value
    data['WELL'] = w


    text = pd.read_csv(f"{textdata}", sep='\t')
    text_unit = text['RU'].unique()
我试着把它做成两个按钮,但无法打开或退出,无法执行

below is one of the text format 
WN  RU  D
AA  SR  19
AA  TF  50
AA  PSU 1700

请提供您正在调用的
QFileDialog.getOpenFileName
两次,以便它将打开一个文件对话框两次。此las文件和txt文件是否始终具有相同的名称,如\u file.las的名称和\u file.txt的名称?@Heike四次,每个文件两次。我应该叫它两次,因为它是不同类型的文件。@maias请编辑您的代码,并确保它是最小的和可复制的。阅读第一条评论中的链接。我们必须能够复制,粘贴和运行您的代码没有任何实质性的修改。