Создание переменной для аргумента io в pd.read_excel () - PullRequest
0 голосов
/ 06 июня 2018

См. pandas.read_excel().


Я создаю графический интерфейс с Tkinter, который будет автоматизировать окончательные результатыдля нескольких персонажей.Я также довольно новичок в Tkinter.В моем коде я читаю несколько таблиц Excel, которые будут созданы в виде фреймов для того, чтобы я мог выполнить соответствующие вычисления для каждого из них.Один лист Excel, на котором я буду читать, представляет собой лист Excel, содержащий список символов, в которые пользователи моего кода в моей команде могут входить и редактировать / добавлять новые символы, если это необходимо.Когда они запускают код, анализ обновляется любыми изменениями / добавленными символами.Для этого вопроса я буду использовать это в качестве примера и назову его filename.

В идеале я хотел бы создать кнопку просмотра в Tkinter, которая предложит пользователю найти файл excel, а затем сохранит выбранный файл в переменной filename для будущего использования.В мой код будет вставлено pd.read_excel() позже, и я бы хотел, чтобы filename был аргументом файла Excel / io, который будет прочитан. Мне просто интересно, возможно ли это.Просмотр других попыток не обязательно учитывает то, что я ищу.

Я тоже впервые использую Tkinter, но вот что-то вроде draft (выделение черновика!) Того, что у меня есть:

import tkinter as tk
from tkinter import *

class Automation:
    def __init__(self, master):
        self.master = master
        master.title("Test")

        self.label = Label(master, text="Welcome to the Score Automation.\nPlease select the ALC File containing all updated names.")
        self.label.pack()

        self.browse_button_characterlist = Button(master, text="Select File", command=self.askopenfile)
        self.browse_button_characterlist.pack()

        self.close_button = Button(master, text="Close", command=master.quit)
        self.close_button.pack()

    def askopenfile(self):
        root = tk.Tk()
        root.withdraw()
        filename = askopenfilename()

        print(filename)

root = Tk()
my_gui = Automation(root)
root.mainloop()

Имя файла затем сохраняется в качестве аргумента в pandas.read_excel()

pd.read_excel(filename, usecols = "B", 
               skiprows = range(0,4), skip_footer = 2)

Любые предложения по заказу или как я использую askopenfile() также будет здорово.Заранее спасибо.

1 Ответ

0 голосов
/ 06 июня 2018

Вам здесь не хватает нескольких вещей - что такое объект, что такое модуль (и как извлечь из него методы, если я понимаю, что вы пытались) и использование self.Это еще до того, как tk обработать как корневое окноЯ предлагаю учебник, сначала на Python, а затем tkinter.к вашему вопросу добавьте вверху:

#Do not import *, import only what you need.
from tkinter.filedialog import askopenfilename

и измените ваш обработчик событий (я настоятельно рекомендую изменить имя на что-то, что имеет смысл в вашей программе, например readExcel):

def askopenfile(self):
    #Force specific file types only. Use `self` to make the file name available from any method.
    self.filename = askopenfilename(filetypes=(('xsl','*.xsl'),('xslx','*.xslx')))
    self.excel = pd.read_excel(self.filename, usecols = "B", skiprows = range(0,4), skip_footer = 2)

Примечание. Я удалил две Tk() строки, которые у вас были - у вас уже есть объект Tk в self.master.Не делайте два, так как оно нестабильно и требует много ресурсов, плюс нет причин для двух (у вас уже есть приложение с графическим интерфейсом, зачем создавать два?).

Возможно, вы захотите добавить проверки / попытки, кроме блока, вобработчик.Члены filename и excel теперь доступны через self. в любом другом методе объекта Automation.

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