如何保留在tkinter的顶级弹出窗口中获取的输入字段的值?

时间:2018-08-04 18:37:03

标签: python tkinter

我无法获得将弹出文本条目传递给全局变量的代码,我还试图在以后的所有实例中将此全局变量设置为输入字段中的默认文本。

弹出->输入文件路径->接受并关闭->重新打开将显示默认存在的最后一个文件路径->如果将来更改的新文件路径条目变为默认文件。

import tkinter as tk
from tkinter import ttk
from tkinter import *

master = tk.Tk()

Var1 = StringVar()
Filepath_Var = None

def A_Connect():
    root = Tk()
    root.title("Entry Field")

    def entry_field():
        global Filepath_Var
        Filepath_Var = Var1.get()

    tk.Label(root, text="filepath: ").grid(row=0)
    e1 = tk.Entry(root, textvariable=Var1)

    tk.Label(root, text="Item Number: ").grid(row=1)
    e2 = tk.Entry(root)
    #e1.insert(0, r"C:\Users\zxy\ghj\iugf\Bea\something.xlsx")
    e1.insert(0, Var1.get())

    e1.grid(row=0, column=1)
    e2.grid(row=1, column=1)

    Button(root, text = 'Accept', command = entry_field).grid(row=3, column=1,
                                    sticky=W, pady=4)
    root.mainloop()

note = ttk.Notebook(master)

tab1 = tk.Frame(note)

canvas7 = Canvas(tab1, width=520, height=350)
canvas7.pack()

A_Button = tk.Button(tab1, text="A",
                       width=12, height=3,command=A_Connect, anchor = 'w')
A_Button_Window = canvas7.create_window(20, 120, anchor = 'sw',
                                         window = A_Button)

note.add(tab1, text = "  Main    ")

note.pack()
master.mainloop()

1 个答案:

答案 0 :(得分:0)

作为您的earlier question的后续措施,我将一个(裸露的骨头)所需行为的示例封装在两个类中:

主应用程序由一个按钮组成,该按钮可启动条目弹出窗口;填写字段并接受后,条目中的值将提供给应用,然后关闭弹出窗口。

输入的值由应用程序存储,并用于在连续的弹出窗口中填充输入字段的输入字段。

您可能想要在更改默认值和关闭弹出窗口之前添加确认和验证,但是在这里,您具有将其附加到的基本框架。

import tkinter as tk


class PopUpEntry(tk.Toplevel):
    def __init__(self, master, default_value=None):
        self.master = master
        super().__init__(self.master)
        if default_value is None:
            self.default_entry = 'C:*****\somthing.xlsx'
        else:
            self.default_entry = default_value
        self.title("Entry Field")
        tk.Label(self, text="Filepath: ").pack()
        self.e1 = tk.Entry(self)
        self.e1.insert(0, self.default_entry)
        self.e1.pack()
        tk.Button(self, text = 'Accept', command=self.entry_field).pack()

    def entry_field(self):
        self.default_entry = self.e1.get()
        self.master.provide_entry_value(self.default_entry)
        self.destroy()


class App(tk.Tk):
    def __init__(self):
        super().__init__()
        self.pop_entry = tk.Button(self, text='launch entry', command=self.launch_entry)
        self.pop_entry.pack()
        self.default_entry_value = None
        self.mainloop()

    def launch_entry(self):
        PopUpEntry(self, self.default_entry_value)

    def provide_entry_value(self, value):
        self.default_entry_value = value
        print(self.default_entry_value)

App()