Используйте результирующую переменную кнопки как переменную для другой - PullRequest
0 голосов
/ 27 февраля 2019

Извините, если название немного сбивает с толку, я не знал, как это лучше выразить.

У меня возникла следующая проблема: я использую функцию filedialog Tkinter, чтобы выбрать несколько CSV-файлов после нажатия кнопки, и затем я обрабатываю эти файлы, чтобы получить несколько значений в качестве кадров данных pandas.После этого я хочу использовать эти фреймы данных pandas в функции, которая будет использоваться для другой кнопки, но я не могу вывести эти фреймы данных за пределы их начальной функции.Одна из основных проблем, которую я пытаюсь сделать, заключается в том, что из-за используемого цикла for, информационный кадр перезаписывается каждый раз, когда цикл повторяется, поэтому я обычно получаю только последний rt.Идеальным вариантом было бы иметь возможность поместить функцию, которую вторая кнопка (convItol) будет вызывать, в функцию выбора (ту, которая используется для загрузки файлов), но я не знаю, можно ли это сделать таким образом.

Вот мой код:

from tkinter import *
from tkinter import filedialog
import glob, os
from pandas import *
import matplotlib.pyplot as plt
from scipy import stats
import ntpath
import sqlite3
import pandas as pd

#create window
window=Tk()

#textlist
screen=Listbox(window, height=10, width=50)
screen.grid(column=0, row=1, rowspan=4, columnspan=8)

#scrollbar
scrollbar=Scrollbar(window)
scrollbar.grid(row=2, column=8, sticky=S+N)
screen.configure(yscrollcommand=scrollbar.set)
scrollbar.configure(command=screen.yview)

#separator for the buttons
separator=Frame(height=2,bd=1, relief=SUNKEN)
separator.grid(row=2,column=20)


#selectfiles
def select():
    selector=filedialog.askopenfilenames(parent=window,
    initialdir="/", title="Upload")
    for file in selector:
        filename=ntpath.basename(file)
        rt=pandas.read_csv(file, skiprows=6)
        rt.set_index('Peak')
        #rt is the pandas dataframe that I want to use in another function

#select button:
browse=Button(separator, text="Browse", command=select, width=10)
browse.grid(row=0, column=1)

#Conversion ITol function
def ConversionItol():
    #here is where I would like to use the rt pandas dataframe

#Itol conversion Button
convItol=Button(separator, text="Conversion ITol", command=ConversionItol)
convItol.grid(row=1,column=1)
convSty=Button(separator, text="Conversion Sty")
convSty.grid(row=2, column=1)

window.mainloop()

Заранее спасибо.

1 Ответ

0 голосов
/ 27 февраля 2019

Вы можете использовать переменную, которую вы создаете в верхней части вашего файла.

data = 'whatever'

Затем вы просто добавляете эти две строки в select():

global data
data = rt

Затемдобавьте строку global data к ConversionItol(), и вы можете использовать rt как data.Надеюсь, что это помогло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...