【问题标题】:Returning data to my GUI application on Python在 Python 上将数据返回到我的 GUI 应用程序
【发布时间】:2017-07-25 21:01:23
【问题描述】:

我再次来到这个很棒的社区寻求帮助。 我发现了一些类似的问题,但并不完全一样。

我用 Python 编写了一个程序,将 porpouse 用作教学工具(因为商业软件非常昂贵)。

我的代码已经完成,现在我正试图将它放在一个简单的 GUI 中给我的学生。 (顺便说一下,我正在使用 tkinter)

下面的代码是其中的一部分,我在其中调用 tk 应用程序以通过导入向导导入数据,并将数据存储为 pandas 数据框。

import tkinter as tk
from tkinter import filedialog
import pandas as pd
import numpy as np

#import data
ascii_well=filedialog.askopenfilename()
df_test=pd.read_csv(ascii_well, sep="\s+", index_col=0, na_values=-999.25)

print(df_teste)

Out[5]: 
       a  b   c
 IDX                  
 0      2.1   2.2   30
 1      2.2   2.3  150

我想在我的 GUI 中添加一种显示此 DataFrame 的方法(如果它更容易实现,可以改为数组)。但我不想只向用户显示数据。我想要实现的是一种最终用户不仅可以看到数据,还可以更改数据框的值的方式。

举个简单的例子

假设用户想要将 de 值 2.1(列“a”,IDX=0)更改为 3。

我在 spyder,Python 3 上编写我的代码。

谢谢各位!!

【问题讨论】:

  • 查看我对类似问题的回答here
  • 我们还需要更多的代码来测试。您目前如何操作数据框。这可以转换为使用提交给用户可以输入的条目小部件的值的函数。
  • 在这种特殊情况下,我只使用 DataFrame,因为我使用 pandas 将数据导入到项目中。并且存储的数据具有不同的子数据,但在遗传上相关(每一列是特定组的参数),我可以用他的“专有名称”来称呼每个数据。我工作轻松

标签: python database user-interface tkinter


【解决方案1】:

这是一个简单的示例,说明如何使用 Entry 小部件从 tkinter GUI 操作变量以获取用户数据。

这个例子非常简单,但应该很好地说明如何从用户那里获取数据并将其保存到变量中,然后显示该数据。

您可以修改方法以使用您的数据库并从那里开始。

import tkinter as tk

class tester(tk.Frame):
    def __init__(self, parent, *args, **kwargs):
        tk.Frame.__init__(self, parent, *args, **kwargs)       

        self.parent = parent
        self.my_var = ""
        self.ent0 = tk.Entry(self.parent)
        self.ent0.pack()

        self.btn1 = tk.Button(self.parent, text="Save Values", command = self.save_values)
        self.btn1.pack()
        self.btn2 = tk.Button(self.parent, text="Load Values", command = self.load_values)
        self.btn2.pack()

    def save_values(self):
        print(self.ent0.get())
        self.my_var = self.ent0.get()
        self.ent0.delete(0, tk.END)

    def load_values(self):

        self.ent0.delete(0, tk.END)
        self.ent0.insert(tk.END, self.my_var)


if __name__ == "__main__":
    root = tk.Tk()
    app = tester(root)
    root.mainloop()

根据您的评论,我在下面制作了此代码的非类版本:

import tkinter as tk


root = tk.Tk()

my_var = ""
ent0 = tk.Entry(root)
ent0.pack()

def save_values():
    global my_var, ent0
    my_var = ent0.get()
    ent0.delete(0, tk.END)

def load_values():
    global my_var, ent0
    ent0.delete(0, tk.END)
    ent0.insert(tk.END, my_var)

btn1 = tk.Button(root, text="Save Values", command = save_values)
btn1.pack()
btn2 = tk.Button(root, text="Load Values", command = load_values)
btn2.pack()

root.mainloop()

【讨论】:

  • 非常感谢!我没有太多的课程经验,我不知道如何使用它,但我运行你的代码,我认为我可以将它调整为我的目标。谢谢!
  • @GabrielBR 我添加了我的示例的非类版本,因此您也可以使用它。
  • 非常感谢。最近我发布了另一个主题。如果你能检查它,我会欣赏它! stackoverflow.com/questions/45300287/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
  • 2020-08-08
  • 1970-01-01
相关资源
最近更新 更多