更改tkinter小部件位置

zep*_*hyr -1 python user-interface tkinter

我的代码类似于以下内容

import tkinter as tk
from tkinter import Tk
from tkinter import ttk

root = Tk()

ttk.Label(root, text = 'label text', justify = 'center').grid(row=0, column=0)
string = tk.StringVar()
string.set('entry text')
ttk.Entry(root, textvariable = string).grid(row=0, column=1)
mainButton = ttk.Button(root, text = 'BUTTON').grid(row = 1, columnspan = 2)

root.pack()
Run Code Online (Sandbox Code Playgroud)

实际上,这使得第一行在其旁边有一个标签和一个文本框,在同一行上,然后是两个下面的按钮.现在,当按下该按钮时,我想在包含按钮的行中添加新标签/条目,并将按钮向下移动一行.有可行的方法吗?

fhd*_*sdg 6

使用grid_forget,您可以删除按钮,然后再使用grid新位置.我在下面的例子中证明了这一点.我已经把你的程序变成了一个class,所以你可以很容易地传递诸如string through之类的变量self.正如你所看到的,我已经追加每一个新StringVarself.string.这样,您可以使用检索每个窗口小部件的条目文本self.string[index].get()

import tkinter as tk
from tkinter import ttk

class App():

    def __init__(self):
        self.root = tk.Tk()

        ttk.Label(self.root, text = 'label text', justify = 'center').grid(row=0, column=0)
        self.string = [tk.StringVar()]
        self.string[0].set('entry text')
        ttk.Entry(self.root, textvariable = self.string[0]).grid(row=0, column=1)
        self.mainButton = ttk.Button(self.root, text = 'BUTTON', command=self.callback)
        self.mainButton.grid(row = 1, columnspan = 2)

        self.root.mainloop()

    def callback(self):
        self.mainButton.grid_forget()
        self.string.append(tk.StringVar())
        l = len(self.string)
        self.string[l-1].set('entry text')
        ttk.Label(self.root, text = 'label text', justify = 'center').grid(row=l-1, column=0)
        ttk.Entry(self.root, textvariable = self.string[l-1]).grid(row=l-1, column=1)
        self.mainButton.grid(row = l, columnspan = 2)

App()
Run Code Online (Sandbox Code Playgroud)