如何将用户输入设置为另一个框架中 Tkinter Entry 小部件的默认文本?

克里斯·陈

我有两个框架可以切换。在每一帧中,都有一个Entry盒子。如何Entry将第一帧中第一个框中的输入设置Entry第二帧中第二个框中的默认文本

from tkinter import *


class Root(Tk):

    def __init__(self, *args, **kwargs):
        Tk.__init__(self, *args, **kwargs)
        container = Frame(self)
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}
        for F in (PageOne, PageTwo):
            page_name = F.__name__
            frame = F(parent=container, controller=self)
            self.frames[page_name] = frame

            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame("PageOne")

    def show_frame(self, page_name):
        frame = self.frames[page_name]
        frame.tkraise()

    def quit(self):
        self.destroy()

text = ''


class PageOne(Frame):

    def __init__(self, parent, controller):
        Frame.__init__(self, parent)
        self.controller = controller

        global text

        entry_box_1 = Entry(self, width=40)
        entry_box_1.pack()
        text = entry_box_1.get()

        quit_button = Button(self, text="Quit Program",
                    command=lambda: controller.quit())
        next_button = Button(self, text="Next",
                    command=lambda: controller.show_frame('PageTwo'))

        next_button.pack()
        quit_button.pack()


class PageTwo(Frame):

    def __init__(self, parent, controller):
        Frame.__init__(self, parent)
        self.controller = controller

        entry_box_2 = Entry(self, width=40)
        entry_box_2.insert(END, text)
        entry_box_2.pack()

        quit_button = Button(self, text="Quit Program",
                            command=lambda: controller.quit())
        back_button = Button(self, text="Back",
                            command=lambda: controller.show_frame("PageOne"))

        back_button.pack()
        quit_button.pack()

if __name__ == "__main__":
    root = Root()
    root.mainloop()

Entry当我切换到第二帧时,我的第二个框一直是空白的。

用户5401398

PageTwotext变量为空字符串时,您正在初始化框架,而当您切换到此框架时,您没有向 插入任何值entry_box_2

我建议您insert每次切换到PageTwo框架时都调用该方法您可以通过创建一个类似于show_frame_with_default_text以下代码中的方法的新切换方法来实现此目的

from tkinter import *


class Root(Tk):

    def __init__(self, *args, **kwargs):
        Tk.__init__(self, *args, **kwargs)
        container = Frame(self)
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}
        for F in (PageOne, PageTwo):
            page_name = F.__name__
            frame = F(parent=container, controller=self)
            self.frames[page_name] = frame

            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame("PageOne")

    def show_frame(self, page_name):
        frame = self.frames[page_name]
        frame.tkraise()

    def show_frame_with_default_text(self, page_name, text):
        frame = self.frames[page_name]
        frame.entry_box.delete(0, END)
        frame.entry_box.insert(0, text)
        frame.tkraise()

    def quit(self):
        self.destroy()


class PageOne(Frame):

    def __init__(self, parent, controller):
        Frame.__init__(self, parent)
        self.controller = controller

        entry_box_1 = Entry(self, width=40)
        entry_box_1.pack()

        quit_button = Button(self, text="Quit Program",
                    command=lambda: controller.quit())
        next_button = Button(self, text="Next",
                    command=lambda: controller.show_frame_with_default_text('PageTwo', entry_box_1.get()))

        next_button.pack()
        quit_button.pack()


class PageTwo(Frame):

    def __init__(self, parent, controller):
        Frame.__init__(self, parent)
        self.controller = controller

        self.entry_box = Entry(self, width=40)
        self.entry_box.pack()

        quit_button = Button(self, text="Quit Program",
                            command=lambda: controller.quit())
        back_button = Button(self, text="Back",
                            command=lambda: controller.show_frame("PageOne"))

        back_button.pack()
        quit_button.pack()


if __name__ == "__main__":
    root = Root()
    root.mainloop()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何为Tkinter Entry小部件设置默认文本

如何为Tkinter Entry小部件设置默认文本

如何从Tkinter文本小部件获取输入?

如何从Tkinter文本小部件获取输入?

在Tkinter中交互式验证Entry小部件内容

从Tkinter的小部件中删除文本变量

Tkinter文本小部件中的撤消功能

如何在tkinter Entry小部件中插入临时文本?

如何在Tkinter文本小部件中配置默认的双击行为?

tkinter,如何获取Entry小部件的值?

Tkinter:如何制作一个圆角文本小部件?

尝试从Entry小部件获取数据(tkinter)

我如何制作一个按钮,使其在按下时将产品名称显示为文本小部件,而无需在Tkinter中使用Entry小部件

用户在tkinter Entry小部件中输入测试时,如何关闭当前的tkinter窗口并打开新的tkinter窗口

在Tkinter中动态设置Entry小部件值

存储来自Entry小部件tkinter的数据

列表中的 Tkinter Entry 小部件都保存相同的数据

如何使用 python tkinter 中的复选按钮在 Entry 小部件中显示或隐藏文本?

如何将多个按钮链接到 tkinter 中的一个文本小部件?

无法在 Python 3 中获取 tkinter Entry 小部件的内容

如何在 tkinter 上的框架中放置 Entry 小部件

如何从 tkinter 中的函数访问 Entry 小部件内的文本?

Tkinter,在文本小部件的嵌入框架小部件中添加小部件

Tkinter Entry 小部件插入宽度

如何从 Entry 小部件获取文本?

在 Tkinter 的 Entry 小部件中输入文本时启用按钮

如何将提取的指定文本范围从 Entry 更改为另一个?(tkinter)

Python Tkinter 文本小部件中的随机 { }

Python 不会将来自 tkinter 的 Entry 小部件的用户输入存储到变量中