如何解决打开文件对话框重复运行两次
我尝试在 PyQt5 中使用 QFileDialog
打开两种不同类型的文件以获取 Pandas 数据帧,但在执行之前它为每个文件重复打开两次。但是,当我仅使用特定文件 'filename' 时,它将直接执行一次。
使用此代码打开了两次:
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',"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,"LAS files (*.las)")[0]
def text(self):
self.textfile = QFileDialog.getopenFileName(self,"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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。