1

使用 Python Tkinter 模块,我正在尝试构建一个接受用户数据的应用程序;调用 pandas 数据帧上的函数——通过 csv 文件创建;然后将结果输出到 ap 的屏幕框。

这是我的尝试,我没有得到任何输出:

import pandas as pd
import ttk

def parsefile(*args):
    try:
      df=pd.read_csv("dataforcluster.csv")

      # do something to the data...

      df.ix[(df.sp-x).abs().argsort()[:5]]

    except ValueError:
      pass

root = Tk()
root.title("Closest_5")

 mainframe = ttk.Frame(root, padding="3 3 12 12")
 mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
 mainframe.columnconfigure(0, weight=1)
 mainframe.rowconfigure(0, weight=1)

 sp_price_change = StringVar()
 output = StringVar()

 sp_price_change_entry = ttk.Entry(mainframe, width=7, textvariable=sp_price_change)
 sp_price_change_entry.grid(column=2, row=1, sticky=(W, E))

 ttk.Label(mainframe, textvariable=output).grid(column=2, row=2, sticky=(W, E))
 ttk.Button(mainframe, text="Calculate", command=parsefile).grid(column=3, row=3, sticky=W)

 ttk.Label(mainframe, text="sp_price_change").grid(column=3, row=1, sticky=W)
 ttk.Label(mainframe, text="is equivalent to").grid(column=1, row=2, sticky=E)
 ttk.Label(mainframe, text="output").grid(column=3, row=2, sticky=W)

 for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)

   sp_price_change_entry.focus()
   root.bind('<Return>', calculate)

  root.mainloop()

我的示例数据可以在这里获得:https ://www.dropbox.com/s/yxx0rtio15dzmfq/dataforcluster.csv

在此先感谢您的任何建议。

4

1 回答 1

1

您在问题中遗漏了一些重要细节。让我猜一猜。

我的猜测是,您希望计算结果出现在具有字符串“输出”的标签中,对吗?

如果是这样,您需要做两件事:

  1. 将您的标签定义更改为ttk.Label(mainframe, textvariable=output1). 请注意,我使用的是属性textvariable而不是text,并且我使用的是变量名而不是包含变量名的字符串。这将标签文本与该变量的值联系起来;当变量改变时,标签也会改变。

  2. 每当您完成计算结果时,您需要执行output.set(...), 并替换...为您想要显示的结果。不过,我不知道哪个变量包含您要显示的结果,但大概您在某个地方有一些变量,其中包含您要显示的数据。

另一种建议是执行以下操作:

  1. 扔掉output变量
  2. 保存对您的小部件的引用,例如:the_output_widget = Label(...). 请注意,您不能.grid(...)在同一条线路上调用,因为这将设置the_output_widget为无。无论如何,将小部件创建和小部件布局分开通常是最佳实践
  3. 当您有想要显示的结果时,使用 重新配置小部件configure,例如:(您拥有的包含结果的任何变量the_output_widget.configure(text=the_result)在哪里)。the_result
于 2013-07-30T02:20:47.940 回答