python - 如何使用 Python Tkinter 使按钮打开特定的 .csv 文件?

标签 python user-interface csv tkinter

我试图让这个程序将 .csv 文件的内容打印到 GUI 上。

我在 Tkinter 中创建。它主要工作,但我想不出一种方法让每个按钮打印它链接到的文件的内容。

目前,我创建了一个仅链接到其中一个文件的变量,这表明它可以正常工作。

变量是“loadFiles”,设置打开的项目是“a_P.csv”。有什么方法可以使按钮将此变量链接到相关的 .csv 文件?

代码在此 pastebin 链接中:http://pastebin.com/ZP2pPvKA

该程序会在与它相同的文件夹中搜索以 “_P.csv” 结尾的文件,因此您可能必须创建一个包含 7 个对象的 .csv。

最佳答案

我也按照 heinzderaugust 一开始建议的方式进行了尝试:

 button[i] = ttk.Button(loadProject, text=data_files[i], command = lambda i=data_files[i]:load(i)).grid(column=1, row=i, sticky=W)  

我还能够通过使用一个类作为回调的中间部分来解决这个问题: (这个类被插入到 viewProject 中)

class Command:
            def __init__(self, callback, *args, **kwargs):
                    self.callback = callback
                    self.args = args
                    self.kwargs = kwargs

            def __call__(self):
                    return(self.callback(*self.args, **self.kwargs))

然后我将您的按钮定义更改为:

button[i] = ttk.Button(loadProject, text=data_files[i], command = Command(load,data_files[i])).grid(column=1, row=i, sticky=W)     

最后我更改了加载函数以接受一个参数:

def load(myFile):                
            spamReader = csv.reader(open(myFile))
            for row in spamReader:
                    a = list(row)

            ttk.Label(loadProject, text=(a[0])).grid(column=4, row=0, sticky=W)
            ttk.Label(loadProject, text=("\n"+a[1])).grid(column=4, row=1, sticky=W)
            ttk.Label(loadProject, text=("\n"+a[2])).grid(column=4, row=2, sticky=W)
            ttk.Label(loadProject, text=(a[3])).grid(column=4, row=3, sticky=W)
            ttk.Label(loadProject, text=(a[4])).grid(column=4, row=4, sticky=W)
            ttk.Label(loadProject, text=("\n"+a[5])).grid(column=4, row=5, sticky=W)
            ttk.Label(loadProject, text=("\n"+a[6])).grid(column=4, row=6, sticky=W)
            ttk.Label(loadProject, text=("\n\n"+a[7])).grid(column=4, row=7, sticky=W)

我不确定哪个是最佳实践,但两者都有效。

(当然,lambda 方法确实看起来更像“pythonic”)

来源:https://code.activestate.com/recipes/66521-avoiding-lambda-in-writing-callback-functions/

关于python - 如何使用 Python Tkinter 使按钮打开特定的 .csv 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9754056/

相关文章:

python - 如何使用 python protobuf 2.5.0 设置字节字段?

python - 如何在 cython 中按值访问枚举类型

html - 在不影响其他标签的情况下在 View 的一部分内呈现 HTML

php - MySQL加载文件无效整数

java - Spring MVC - 如何在jsp页面上显示CSV文件中的每一行数据?

python - 如何用值填充 QListView 并显示数据?

javascript - Django jquery 数据表 : Uncaught TypeError: Cannot read property 'length' of undefined

java - Java 可以重用未处置的系统 GUI 资源吗?

Java - setVisible(true) 对 GUI 没有影响

php - magento 中的 getcsv() 和 getcsvfile() 方法有什么区别?