Python 使用按钮Tkinter创建新的输入框
当用户决定输入更多内容时,我如何使按钮在下面添加两个框(并排)Python 使用按钮Tkinter创建新的输入框,python,tkinter,Python,Tkinter,当用户决定输入更多内容时,我如何使按钮在下面添加两个框(并排) def addBox(): labelframe = Tkinter.Frame() labelframe.bind("<Add Input>", callback) labelframe.pack() labelframe = Tkinter.Frame() labelFrom = Tkinter.Label(labelframe, text= "from") labelFrom.grid(
def addBox():
labelframe = Tkinter.Frame()
labelframe.bind("<Add Input>", callback)
labelframe.pack()
labelframe = Tkinter.Frame()
labelFrom = Tkinter.Label(labelframe, text= "from")
labelFrom.grid(column=1, row=0)
e = Tkinter.Entry(labelframe)
e.grid(column=1, row=1)
labelTo = Tkinter.Label(labelframe, text= "to")
labelTo.grid(column=2, row=0)
e2 = Tkinter.Entry(labelframe)
e2.grid(column=2, row=1)
labelframe.pack()
addboxButton = Button( root,text='<Add Time Input>', fg="Red",command="addBox")
addboxButton.pack(side=Tkinter.TOP)
def addBox():
labelframe=Tkinter.Frame()
labelframe.bind(“,回调)
labelframe.pack()
labelframe=Tkinter.Frame()
labelFrom=Tkinter.Label(labelframe,text=“from”)
labelFrom.grid(列=1,行=0)
e=Tkinter.Entry(labelframe)
e、 网格(列=1,行=1)
labelTo=Tkinter.Label(labelframe,text=“to”)
labelTo.grid(列=2,行=0)
e2=Tkinter.Entry(labelframe)
e2.网格(列=2,行=1)
labelframe.pack()
addboxButton=按钮(根,文本=“”,fg=“红色”,command=“addBox”)
addboxButton.pack(侧面=顶部)
这是如何添加条目的示例
可能是因为在command=addBox
因为您必须从条目中获取值,所以必须记住列表中的条目。
我添加了从条目打印文本的按钮
from Tkinter import *
#------------------------------------
def addBox():
print "ADD"
ent = Entry(root)
ent.pack()
all_entries.append( ent )
#------------------------------------
def showEntries():
for number, ent in enumerate(all_entries):
print number, ent.get()
#------------------------------------
all_entries = []
root = Tk()
showButton = Button(root, text='Show all text', command=showEntries)
showButton.pack()
addboxButton = Button(root, text='<Add Time Input>', fg="Red", command=addBox)
addboxButton.pack()
root.mainloop()
#------------------------------------
编辑:
另一个例子:
from Tkinter import *
#------------------------------------
def addBox():
print "ADD"
frame = Frame(root)
frame.pack()
Label(frame, text='From').grid(row=0, column=0)
ent1 = Entry(frame)
ent1.grid(row=1, column=0)
Label(frame, text='To').grid(row=0, column=1)
ent2 = Entry(frame)
ent2.grid(row=1, column=1)
all_entries.append( (ent1, ent2) )
#------------------------------------
def showEntries():
for number, (ent1, ent2) in enumerate(all_entries):
print number, ent1.get(), ent2.get()
#------------------------------------
all_entries = []
root = Tk()
showButton = Button(root, text='Show all text', command=showEntries)
showButton.pack()
addboxButton = Button(root, text='<Add Time Input>', fg="Red", command=addBox)
addboxButton.pack()
root.mainloop()
#------------------------------------
从Tkinter导入*
#------------------------------------
def addBox():
打印“添加”
帧=帧(根)
frame.pack()
标签(frame,text='From').grid(行=0,列=0)
ent1=入口(框架)
ent1.grid(行=1,列=0)
标签(frame,text='To').grid(行=0,列=1)
ent2=入口(框架)
ent2.网格(行=1,列=1)
所有_条目。追加((ent1,ent2))
#------------------------------------
def showEntries():
对于枚举(所有_条目)中的编号(ent1、ent2):
打印编号,ent1.get(),ent2.get()
#------------------------------------
所有_条目=[]
root=Tk()
showButton=按钮(root,text='Show all text',command=showEntries)
showButton.pack()
addboxButton=按钮(根,文本=“”,fg=“红色”,命令=addBox)
addboxButton.pack()
root.mainloop()
#------------------------------------
首先,缩进是一团乱,所以我不知道addBox函数在哪里结束。
第二,我认为你不需要按钮,我想checkbutton也会做同样的事情,它对用户来说也更常见和熟悉,我曾经遇到过这个问题,我只是创建了一个输入框,并在它上面贴了一个标签,表明它是可选的,至于代码,如果它是空的,我就忽略它,如果我找到任何输入,我就验证输入。
但是,这只是一个输入框,您可能需要更复杂的东西。
看这个。。
当然,如果您想更真实一些,也可以修改主窗口的长度和x轴。函数缩进是否正确def addBox()
中应该包含代码indent@MahasishShome编辑您不应该缩进整个代码!!!现在,当调用def addBox()
时,所有代码都将运行。Python中的缩进与javascript、PHP中的大括号{}
类似。所以基本上只缩进你希望它在函数中的那部分代码。你不应该同时使用pack()
和grid()
。使用不带引号的函数名command=addBox
如果我需要两个并排的盒子怎么办(当点击按钮时,它会将两个框并排创建在一起?我似乎无法使其工作。如果您需要框并排,请使用grid(column=…)
。但不要将pack()
和grid()
混合在一个框架中。如果您使用pack())
在一个帧中,然后创建第二个帧,将其放在第一个帧中,然后可以使用grid()
第二帧内。请参阅新示例。谢谢,我似乎无法通过用户需要更多输入才能滚动的方式使滚动条正常工作。据我所知,唯一的方法是使用带有帧内的画布来滚动滚动。请参阅更多:是的,我今天早些时候读过,但我似乎没有正确地理解
from Tkinter import *
#------------------------------------
def addBox():
print "ADD"
frame = Frame(root)
frame.pack()
Label(frame, text='From').grid(row=0, column=0)
ent1 = Entry(frame)
ent1.grid(row=1, column=0)
Label(frame, text='To').grid(row=0, column=1)
ent2 = Entry(frame)
ent2.grid(row=1, column=1)
all_entries.append( (ent1, ent2) )
#------------------------------------
def showEntries():
for number, (ent1, ent2) in enumerate(all_entries):
print number, ent1.get(), ent2.get()
#------------------------------------
all_entries = []
root = Tk()
showButton = Button(root, text='Show all text', command=showEntries)
showButton.pack()
addboxButton = Button(root, text='<Add Time Input>', fg="Red", command=addBox)
addboxButton.pack()
root.mainloop()
#------------------------------------
class OptionsView(Frame):
"""Frame for options in main window"""
def __init__(self, x, y, parent):
Frame.__init__(self, parent)
self.x = x
self.y = y
self.placed = False
self.hidden = False
self.btn = Button(self, text = 'Button attached to the frame ..', command = lambda: print('Button in frame clicked ..')).pack()
def pack(self):
self.place(x = self.x, y = self.y)
self.placed = True
def toggle_view(self):
if self.hidden:
self.pack()
self.hidden = False
else:
self.place_forget()
self.hidden = True
if __name__ == '__main__':
def m_frame():
if val.get() and not options_frame.placed:
print('Showing Frame ..')
options_frame.pack()
else:
print('Toggling Frame ..')
options_frame.toggle_view()
root = Tk()
root.geometry('300x400+500+600')
root.title('Testing Hiding Frames ..')
options_frame = OptionsView(200, 300, root)
val = BooleanVar(value = False)
Checkbutton(text = 'View more Options ..', var = val, command = m_frame).place(x=root.winfo_height()/2, y=root.winfo_width()/2)
try: root.mainloop()
except e: showerror('Error!', 'It seems there\'s a problem ..', str(e))