【问题标题】:Open a specific file from a tkinter window从 tkinter 窗口打开特定文件
【发布时间】:2020-03-30 13:54:12
【问题描述】:

我有一个 tkinter 窗口,需要按一个按钮来打开一个 csv 文件。例如:

root = Tk()

def open_file():
    # show the csv file to the user

open_button = Button(root, text="Open", command=open_file)
open_button.pack()

有没有办法做到这一点,或者类似的东西?我曾尝试使用 askopenfilename,但这似乎对我不起作用,因为它只打开主目录。

【问题讨论】:

  • 首先,程序如何知道要打开哪个文件?如果您使用的是 TkinterfileDialog,它是一个内置的小部件,允许用户“浏览”然后选择一个文件。如果你只是想让你的程序打开一个你已经有路径的文件,那么只需在 open_file() 中使用 python open

标签: python python-3.x csv tkinter


【解决方案1】:

查看this 链接。从链接中可以看出,python 2.7 和 3 的方法略有不同。由于 python 2.7 即将结束,我将针对 python 3 进行演示:

from tkinter import filedialog
from tkinter import *

root = Tk()
root.filename =  filedialog.askopenfilename(initialdir = "/",title = "Select file",filetypes = (("jpeg files","*.jpg"),("all files","*.*")))
print (root.filename)

如果您使用 pip 正确安装了 tkinter 并正确填写了所有参数,它应该可以工作。确保根目录确实存在并且您指定的语法正确(斜线的类型很重要)。

您也可以打开文件选择器,即使它在错误的目录中启动。您可以浏览到正确的根目录,然后单击确定并让程序打印该目录。然后你就知道如何指定根目录了。

【讨论】:

  • 他们明确表示他们正在使用 tkinter。使用 wxpython 发布解决方案没有用。
  • 虽然没有必要投反对票。我还发布了 tkinter 的解决方案。我编辑了我的答案,只包含 tkinter 解决方案。
  • 不鼓励在 stackoverflow 上仅链接答案。您至少应该总结链接页面上的内容。如果该站点出现故障或 url 更改,则此答案将变得无用。见Are answers that just contain links elsewhere really “good answers”?how do I write a good answer
  • 好的,谢谢你的反馈,那我再解释一下。
【解决方案2】:

以下代码显示带有按钮的 tkinter 窗口。当用户单击按钮并指向一个 CSV 文件时,它会将前几行显示到一个消息框中以供显示。我使用 pandas 打开 CSV 文件。

import tkinter as tk
from tkinter import filedialog
import tkinter.messagebox as msgBox
import os
import pandas as pd

def open_file():
    filename = filedialog.askopenfilename(initialdir=os.getcwd())
    if(filename!=''):
        df = pd.read_csv(filename, encoding = "ISO-8859-1", low_memory=False)
        mR,mC=df.shape
        cols = df.columns
        num=5
        pd.options.display.float_format = '{:.2f}'.format
        msg=str(df.iloc[:num,:]) + '\n' + '...\n' + \
        df.iloc[-num:,:].to_string(header=False) + '\n\n' + \
        str(df.describe())
        msgBox.showinfo(title="Data", message=msg)

root = tk.Tk()
frame = tk.Frame(root)
frame.pack()
button = tk.Button(frame, text="Open", command=open_file)
button.pack(side = tk.LEFT)
root.mainloop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 2015-02-11
    • 2013-04-29
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多