【问题标题】:Tkinter entry widget in different Frames不同框架中的 Tkinter 条目小部件
【发布时间】:2019-10-17 12:36:40
【问题描述】:

我开始学习 Python 和 GUI,我使用的是 3.7 版本。我的问题是条目小部件。 我只是在检查不同的小部件如何与不同的框架一起工作,并且不像我想象的那样工作。所以我想做一个有两个或更多不同页面的应用程序,但我从两个开始,我想在它们之间进行更改,每个页面都有不同的小部件。在这种情况下,当我在第二页或框架中使用对 Entry 类的调用时,入口块也在主页中,所以我只希望入口块在一页或框架中。如您所见,我使用 .pack() 和 entry 我想使用 .grid() 但是当我尝试这样做时 python 显示错误。

感谢您的帮助。

import tkinter as tk

LARGE_FONT = ("Verdana", 12)


class mainapp(tk.Tk):

    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        # self.geometry("800x600")
        container = tk.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 (StartPage, NewData):
            frame = F(container, self)

            self.frames[F] = frame

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

        self.show_frame(StartPage)

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


class StartPage(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.configure(background='white')
        labeltop = tk.Label(self, text="Hello\n"
                                       "Please Select a option:",
                            bg="white", fg="green", height=4, width=30, font=LARGE_FONT)
        labeltop.grid(row=0, column=0, pady=10, padx=10, columnspan=2)

        self.logo = tk.PhotoImage(file="logo.gif")
        logolabel=tk.Label(self, image=self.logo)
        logolabel.grid(row=0, column=3)

        button1 = tk.Button(self, text="Option1", fg="White", bg="Green", height=6, width=30,
                            command=lambda: controller.show_frame(NewData))
        button1.grid(row=1, column=0, padx=1, pady=10)


class NewData(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.configure(background='white')
        label = tk.Label(self, text="Option1", font=LARGE_FONT)
        label.grid(pady=10, padx=10)

        button1 = tk.Button(self, text="Back to Home",
                            command=lambda: controller.show_frame(StartPage))
        E1 = tk.Entry()
        E1.pack()

        button1.grid()

app = mainapp()
app.mainloop()

【问题讨论】:

    标签: python python-3.x tkinter frame tkinter-entry


    【解决方案1】:

    当您创建小部件时,您必须告诉它们它们所属的位置。当您执行tk.Entry() 时,您并没有这样做,因此它默认进入根窗口。

    如果您希望条目位于特定页面内,则需要将该页面或其子页面之一作为条目的主页面:tk.Entry(self)

    【讨论】:

      【解决方案2】:

      其实我暂时不能测试,但是你不能在一个布局中使用pack grid。在您的情况下,我倾向于使用网格。

      【讨论】:

      • 谨慎措辞。您对“布局”的使用在这里模棱两可。您不能将 grid 和 pack 与具有相同 master 的小部件一起使用,但您可以一起使用它们来创建由许多嵌套小部件组成的布局。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-01
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多