Используйте Tkinter для открытия файла, запуска скрипта и экспорта файла - PullRequest
0 голосов
/ 23 октября 2019

Я хотел бы создать скрипт Pyton, который принимает файл Excel (предоставленный пользователем), запустить скрипт и сохранить этот файл Excel (с именем файла, предоставленным пользователем). Я хотел бы реализовать некоторые кнопки с использованием Tkinter, чтобы позволить непрограммистам легко использовать мой алгоритм.

Я пытался создать кнопки «загрузить данные» и «отобразить данные» (я взял кодв сети), которые оба работают.

Однако мне не удалось запустить скрипт в импортированной базе данных (поскольку я не знаю, как получить к ней доступ)

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

import tkinter as tk
from tkinter import ttk
from tkinter.filedialog import askopenfilename
from tkinter.filedialog import asksaveasfilename
from tkinter.messagebox import showerror
import pandas as pd

import csv

# --- classes ---

class MyWindow:

    def __init__(self, parent):

        self.parent = parent

        self.filename = None
        self.df = None

        self.text = tk.Text(self.parent)
        self.text.pack()

        self.button = tk.Button(self.parent, text='LOAD DATA', command=self.load)
        self.button.pack()

        self.button = tk.Button(self.parent, text='DISPLAY DATA', command=self.display)
        self.button.pack()
        self.button = tk.Button(self.parent, text='DISPLAY DATA', command=self.display)
        self.button.pack()

    def load(self):

        name = askopenfilename(filetypes=[('CSV', '*.csv',), ('Excel', ('*.xls', '*.xslm', '*.xlsx'))])

        if name:
            if name.endswith('.csv'):
                self.df = pd.read_csv(name)
            else:
                self.df = pd.read_excel(name)

            self.filename = name

             display directly
            self.text.insert('end', str(self.df.head()) + '\n')



    def display(self):
        # ask for file if not loaded yet
        if self.df is None:
            self.load_file()

        # display if loaded
        if self.df is not None:
            self.text.insert('end', self.filename + '\n')
            self.text.insert('end', str(self.df.head()) + '\n')

    #def script_python(self):
       # self.df=self.df.iloc[:, :-1]
       #this is not my original script


    #def file_save(self):
    #    savefile = asksaveasfilename(filetypes=(("Excel files", "*.xlsx"),
         #                               ("All files", "*.*") ))



# --- main ---

if __name__ == '__main__':
    root = tk.Tk()
    top = MyWindow(root)
    root.mainloop()

Мой скрипт на Python, который выполняет анализ файла Excel, работает, поэтому я просто написал очень простой скрипт на Python, чтобы сделать вашу жизнь проще.

Спасибо, я новичок в Tkinterи не привыкли к занятиям и словарям. спасибо за вашу помощь

1 Ответ

0 голосов
/ 23 октября 2019

Я изменил ваш код, добавив кнопку для запуска вашего скрипта и кнопку для сохранения данных (остальные я старался максимально приблизить к вашему исходному коду):

import tkinter as tk
from tkinter import ttk
from tkinter.filedialog import askopenfilename
from tkinter.filedialog import asksaveasfilename
from tkinter.messagebox import showerror
import pandas as pd

import csv

# --- classes ---

class MyWindow:
    def __init__(self, parent):

        self.parent = parent

        self.filename = None
        self.df = None

        self.text = tk.Text(self.parent)
        self.text.pack()

        # load data button
        self.load_button = tk.Button(self.parent, text='LOAD DATA', command=self.load)
        self.load_button.pack()

        # display data button
        self.display_button = tk.Button(self.parent, text='DISPLAY DATA', command=self.display)
        self.display_button.pack()

        # run script button
        self.script_button = tk.Button(self.parent, text='RUN SCRIPT', command=self.script_python)
        self.script_button.pack()

        # save data button
        self.save_button = tk.Button(self.parent, text='SAVE DATA', command=self.file_save)
        self.save_button.pack()

    def load(self):
        name = askopenfilename(filetypes=[('CSV', '*.csv',), ('Excel', ('*.xls', '*.xslm', '*.xlsx'))])

        if name:
            if name.endswith('.csv'):
                self.df = pd.read_csv(name)
            else:
                self.df = pd.read_excel(name)

            self.filename = name

            # display directly
            self.text.insert('end', str(self.df.head()) + '\n')

    def display(self):
        # ask for file if not loaded yet
        if self.df is None:
            self.load_file()

        # display if loaded
        if self.df is not None:
            self.text.insert('end', self.filename + '\n')
            self.text.insert('end', str(self.df.head()) + '\n')

    def script_python(self):
        # replace this with the real thing
        self.df = self.df.iloc[:, :-1]

    def file_save(self):
        fname = asksaveasfilename(filetypes=(("Excel files", "*.xlsx"),
                                        ("All files", "*.*")))
        # note: this will fail unless user ends the fname with ".xlsx"
        self.df.to_excel(fname)


# --- main ---

if __name__ == '__main__':
    root = tk.Tk()
    top = MyWindow(root)
    root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...