【问题标题】:Use Tkinter to Open file, run script and export file使用 Tkinter 打开文件、运行脚本和导出文件
【发布时间】:2020-02-19 18:23:19
【问题描述】:

我想创建一个 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()

我的对excel文件进​​行分析的python脚本有效,所以我只是放了一个非常简单的python脚本来让你的生活更轻松。

谢谢 我是 Tkinter 的新手,不习惯上课和字典。感谢您的帮助

【问题讨论】:

  • 看起来你可以简单地从self.df访问导入的数据库
  • 所以在我的函数中我应该只输入:def script_python(self.df) ?

标签: python excel class button tkinter


【解决方案1】:

我修改了你的代码,添加了一个按钮来运行你的脚本和一个按钮来保存数据(我试图让其余部分尽可能接近你的原始代码):

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()

【讨论】:

    猜你喜欢
    • 2016-11-14
    • 2014-01-09
    • 2013-05-02
    • 2012-03-03
    • 2011-08-27
    • 2014-03-20
    • 2018-02-26
    • 2019-04-01
    • 1970-01-01
    相关资源
    最近更新 更多