我的代码类似于以下
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()
实际上,这会使第一行在其旁边有一个标签和一个文本框,在同一行上,然后是两个下面的按钮。现在,当按下该按钮时,我想在包含按钮的行中添加新标签/条目,并将按钮向下移动一行。有可行的方法吗?
答案 0 :(得分:6)
使用grid_forget
,您可以移除该按钮,然后使用grid
将其重新放置在新位置。我在下面的例子中证明了这一点。
我已将您的程序变为class
,因此您可以轻松地传递变量,例如字符串到self
。如您所见,我已将每个新StringVar
添加到self.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()
答案 1 :(得分:0)
这应该有效。您所做的就是为按钮设置命令,并为其编写一个函数。如果你说原始代码有效,那么这也应该。
import tkinter as tk
from tkinter import Tk
from tkinter import ttk
root = Tk()
ttk.Label(tab, text = 'label text', justify = 'center').grid(row=0, column=0)
string = tk.StringVar()
string.set('entry text')
ttk.Entry(tab, textvariable = string).grid(row=0, column=1)
def clicked():
ttk.Label(tab, text = 'label text 2', justify = 'center').grid(row=1, column=0)
string2 = tk.StringVar()
string.set('entry text')
ttk.Entry(tab, textvariable = string).grid(row=1, column=1)
mainButton = ttk.Button(mainTab, text = 'BUTTON', command = clicked)
mainbutton.grid(row = 2, columnspan = 2)
# mainbutton row=2 will automatically sit at row 1 until a new row 'pushes' it down
root.pack()
答案 2 :(得分:0)
我已经修复了W1ll1amvl的代码,因此它的功能会更好!
from tkinter import ttk
from tkinter import Tk, Label, Button, StringVar, Entry
root = Tk()
Label(root, text = 'label text', justify = 'center').grid(row=0, column=0)
string = StringVar()
string.set('entry text')
Entry(root, textvariable = string).grid(row=0, column=1)
def clicked():
Label(root, text = 'label text 2', justify = 'center').grid(row=1, column=0)
string2 = StringVar()
string.set('entry text')
Entry(root, textvariable = string).grid(row=1, column=1)
mainButton = Button(root, text = 'BUTTON', command = clicked)
mainButton.grid(row = 2, columnspan = 2)
# mainbutton row=2 will automatically sit at row 1 until a new row 'pushes' it down