python - 存储以 tkinter 形式输入的变量

标签 python tkinter

我正在创建一个基于 Tkinter 的表单,我想将用户输入的每个项目存储为单独的变量。我了解如何生成表单,但我不知道如何在用户按下 Enter 按钮后处理程序。我真的只需要将所有内容存储为字符串。

from tkinter import *
import pandas as pd

fields = ('Event', 'Event Folder', 'Session', 'Date: (MM/DD/YYYY)', 'StartTime: 24HR(HH:MM)', 'EndTime: 24HR(HH:MM)')

def saveVars(entries):
    locals().update(entries)
    return 

def makeform(root, fields):
   entries = {}
   for field in fields:
      row = Frame(root)
      lab = Label(row, width=22, text=field+": ", anchor='w')
      ent = Entry(row)
      ent.insert(0,"")
      row.pack(side = TOP, fill = X, padx = 5 , pady = 5)
      lab.pack(side = LEFT)
      ent.pack(side = RIGHT, expand = YES, fill = X)
      entries[field] = ent
   return entries

if __name__ == '__main__':
   root = Tk()
   ents = makeform(root, fields)
   b1 = Button(root, text = 'Enter', command = lambda e = ents: saveVars(e))
   b1.pack(side = LEFT, padx = 5, pady = 5)
   root.mainloop()

最佳答案

您需要做的是构建一个函数来对您的输入字段执行某些操作。也就是说,您可能需要稍微更改一下代码以使这变得更容易。不要在函数中构建标签和输入字段,而是在全局命名空间中构建它们,然后将输入字段存储在列表中。

import tkinter as tk

fields = ('Event', 'Event Folder', 'Session', 'Date: (MM/DD/YYYY)',
          'StartTime: 24HR(HH:MM)', 'EndTime: 24HR(HH:MM)')


def do_something_with_entries():
    for ndex, entry in enumerate(entry_list):
        print(fields[ndex], ': ', entry.get())


if __name__ == '__main__':
    root = tk.Tk()
    entry_list = []
    for field in fields:
        row = tk.Frame(root)
        lab = tk.Label(row, width=22, text=field + ": ", anchor='w')
        ent = tk.Entry(row)
        entry_list.append(ent)
        row.pack(side='top', fill='x', padx=5, pady=5)
        lab.pack(side='left')
        ent.pack(side='right', expand='yes', fill='x')

    tk.Button(root, text='Enter', command=do_something_with_entries).pack(side='left', padx=5, pady=5)
    root.mainloop()

结果:

enter image description here

这是一个使用 pandas 的示例:

import tkinter as tk
import pandas as pd


fields = ['Event', 'Event Folder', 'Session', 'Date: (MM/DD/YYYY)', 'StartTime: 24HR(HH:MM)', 'EndTime: 24HR(HH:MM)']
df = pd.DataFrame(columns=fields)


def do_something_with_entries():
    global df
    stored_values = []
    for ndex, entry in enumerate(entry_list):
        stored_values.append(entry.get())

    series = pd.Series(stored_values, index=fields)
    df = df.append(series, ignore_index=True)


if __name__ == '__main__':
    root = tk.Tk()
    entry_list = []
    for field in fields:
        row = tk.Frame(root)
        lab = tk.Label(row, width=22, text=field + ": ", anchor='w')
        ent = tk.Entry(row)
        entry_list.append(ent)
        row.pack(side='top', fill='x', padx=5, pady=5)
        lab.pack(side='left')
        ent.pack(side='right', expand='yes', fill='x')

    tk.Button(root, text='Enter', command=do_something_with_entries).pack(side='left', padx=5, pady=5)
    root.mainloop()

关于python - 存储以 tkinter 形式输入的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60323021/

相关文章:

python - 如何在显示大量文本时加快滚动响应速度

python - Pandas 将数据放入 df 中

python - Tkinter askopenfilename() 不会关闭

python - 检查按钮和按钮 : using lambda

python - 如何在Python中同时启动线程

python - 如何折叠/旋转多个 Pandas 列

python - 无法解释一行使用 tensorflow 创建 LSTM 单元的 python 代码

python - 将数组从 Python 传递到 Fortran(并返回)

python - 如何将文件路径中的图像格式化为与 python 中的 mnist.load_data() 相同的方式?

python - 从 GStreamer 在 Tkinter 中输出视频?