.grid方法在Python 3 tkinter中不起作用。无论我在行或列中键入什么,文本框都位于同一位置

.grid方法在Python 3 tkinter中不起作用。无论我在行或列中键入什么,文本框都位于同一位置,python,tkinter,Python,Tkinter,无论我在.grid方法的行或列中键入什么值;文本框仍然在同一个位置结束 问题出在代码底部的PageFour类中。我希望能够将文本框放置在我需要它们的地方。我是新的工作与类和tkinter,所以任何帮助将不胜感激 import matplotlib matplotlib.use("TkAgg") from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg from matplot

无论我在.grid方法的行或列中键入什么值;文本框仍然在同一个位置结束

问题出在代码底部的PageFour类中。我希望能够将文本框放置在我需要它们的地方。我是新的工作与类和tkinter,所以任何帮助将不胜感激

import matplotlib
matplotlib.use("TkAgg")

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure


import tkinter as tk
from tkinter import ttk

LARGE_FONT = ("Verdana",12)

class SeaofBTCapp (tk.Tk):

    def __init__(self, *args, **kwargs):

        tk.Tk.__init__(self, *args, **kwargs)
        tk.Tk.iconbitmap(self,default="work.ico")
        tk.Tk.wm_title(self,"The System")

        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,PageOne,PageTwo,PageThree,PageFour):

            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) 
        lable = tk.Label(self,text="Start Page", font=LARGE_FONT)
        lable.pack(pady=10,padx=10)

        button1 = ttk.Button(self,text="Visit Page 1", 
                            command=lambda: controller.show_frame(PageOne))
        button1.pack()

        button2 = ttk.Button(self,text="Visit Page 2", 
                            command=lambda: controller.show_frame(PageTwo))
        button2.pack()

        button3 = ttk.Button(self,text="Graph Page", 
                            command=lambda: controller.show_frame(PageThree))
        button3.pack()

        button4 = ttk.Button(self,text="Tab", 
                            command=lambda: controller.show_frame(PageFour))
        button4.pack()
class PageOne(tk.Frame):

    def __init__(self,parent,controller):
        tk.Frame.__init__(self,parent) 
        lable = tk.Label(self,text="Page One!!!", font=LARGE_FONT)
        lable.pack(pady=10,padx=10)

        button1 = ttk.Button(self,text="Back To Home", 
                            command=lambda: controller.show_frame(StartPage))
        button1.pack()

        button2 = ttk.Button(self,text="Page Two", 
                            command=lambda: controller.show_frame(PageTwo))
        button2.pack()  

class PageTwo(tk.Frame):

    def __init__(self,parent,controller):
        tk.Frame.__init__(self,parent) 
        lable = tk.Label(self,text="Page Two!!!", font=LARGE_FONT)
        lable.pack(pady=10,padx=10)

        button1 = ttk.Button(self,text="Back To Home", 
                            command=lambda: controller.show_frame(StartPage))
        button1.pack()

        button2 = ttk.Button(self,text="Page One", 
                            command=lambda: controller.show_frame(PageOne))
        button2.pack()

class PageThree(tk.Frame):

    def __init__(self,parent,controller):
        tk.Frame.__init__(self,parent) 
        lable = tk.Label(self,text="Graph Page", font=LARGE_FONT)
        lable.pack(pady=10,padx=10)

        button1 = ttk.Button(self,text="Back To Home", 
                            command=lambda: controller.show_frame(StartPage))
        button1.pack()

        f = Figure(figsize =(5,5), dpi=100)
        a = f.add_subplot(111)
        a.plot([1,2,3,4,5,6,7,8],[5,6,1,3,8,9,3,5])

        canvas = FigureCanvasTkAgg(f,self)
        canvas.show()
        canvas.get_tk_widget().pack(side=tk.TOP,fill=tk.BOTH,expand=True)

        toolbar = NavigationToolbar2TkAgg(canvas,self)
        toolbar.update()
        canvas._tkcanvas.pack(side=tk.TOP,fill=tk.BOTH,expand=True)


class PageFour(tk.Frame):

    def __init__(self,parent,controller):
        tk.Frame.__init__(self,parent) 
        tabcontrol= ttk.Notebook(self)
        tabcontrol.pack(expand=1,fill='both')

        tab1 = ttk.Frame(tabcontrol)
        tabcontrol.add(tab1,text='Tab 1')
        txtbox1 = ttk.Entry(tab1, width=12, textvariable = tk.StringVar())
        txtbox1.grid(column=0,row=3)

        txtbox2 = ttk.Entry(tab1, width=12, textvariable = tk.StringVar())
        txtbox2.grid(column=0,row=10)


        tab2 = ttk.Frame(tabcontrol)
        tabcontrol.add(tab2,text='Tab 2')

        button1 = ttk.Button(self,text="Back To Home", 
                            command=lambda: controller.show_frame(StartPage))

app = SeaofBTCapp()
app.mainloop ()                                             
无论我在.grid方法的行或列中键入什么值;文本框仍然在同一个位置结束

不,他们不会的。e、 g.-

txtbox1.grid(column=0, row=0); txtbox2.grid(column=1, row=1)
gridcolumn=1,row=1;txtbox2.gridcolumn=0,row=0

不在同一个地方,尽管它看起来是一样的


现在,考虑到您使用的是row=3和row=10,我假设您希望小部件和行之间存在一些间隙。不会有。这些小部件将在网格系统中显示为一行接一行

无论您为行输入什么,它们都将一个接一个地放置。为什么?如果两行之间没有窗口小部件,tkinter将忽略不存在的行,并将其中包含某个内容的行一行置于另一行之下

如何解决这个问题?我认为有两种方法:

使用place代替grid不建议初学者使用,因为很难放置小部件

使用标签小部件并将它们放置在您真正需要的两个小部件之间的行中,这不是很好的编程实践


txtbox1=ttk.Entrytab1,width=12,textvariable=tk.StringVar txtbox1.placex=20,y=50放置方法有效great@ZacAttack:place在这种情况下工作正常,但一旦您在不同分辨率或不同系统上运行或调整窗口大小,就很难让它在任何情况下都看起来正常。这就是为什么很少建议将place作为最佳解决方案的原因。空行/列没有大小,因此如果您将行1放入,而空行为0,那么您将看不到任何差异。您可以使用rowconfig0,minsize=10来更改行0的大小。