Python 当小部件被删除时,使tkinter窗口收缩
我在做一些程序,我把一堆东西输入一个条目,然后打印成一行。我还添加了一个可以删除行的功能。但是,当我删除一行时,窗口不会收缩。我实际制作程序的方式是有两帧;包含按钮和条目的主框架,以及输出或文本框架。当我删除一行时,它实际上会追加列表中的数据,删除框架和所有小部件,并重新打印行,但没有删除我删除的行 我的代码的问题是,当我删除一行时,未删除的行开始变小并压缩,其次,窗口底部不会向上移动,留下空白 任何帮助都将不胜感激,谢谢 实际上,追加、标记和打印行是在函数append_entry()中,而我的delete函数是delete_row()Python 当小部件被删除时,使tkinter窗口收缩,python,list,tkinter,widget,Python,List,Tkinter,Widget,我在做一些程序,我把一堆东西输入一个条目,然后打印成一行。我还添加了一个可以删除行的功能。但是,当我删除一行时,窗口不会收缩。我实际制作程序的方式是有两帧;包含按钮和条目的主框架,以及输出或文本框架。当我删除一行时,它实际上会追加列表中的数据,删除框架和所有小部件,并重新打印行,但没有删除我删除的行 我的代码的问题是,当我删除一行时,未删除的行开始变小并压缩,其次,窗口底部不会向上移动,留下空白 任何帮助都将不胜感激,谢谢 实际上,追加、标记和打印行是在函数append_entry()中,而我的
从tkinter导入*
全局主窗口
def quit():
主窗口。销毁()
def条目_标签():
领导者标签=标签(主框架,文本='客户名称')
引线标签网格(列=0,行=0)
位置标签=标签(主框架,文本='收据编号')
位置标签网格(列=0,行=1)
numcampers\u label=label(主框架,文本='Item Hired')
numcampers_label.grid(列=0,行=2)
天气标签=标签(主框架,文本='Number Hired')
天气标签网格(列=0,行=3)
行标签=标签(主框架,文本='行')
行标签网格(列=3,行=2)
def按钮():
打印按钮=按钮(主框架,text=“打印详细信息”,命令=附加项)
打印按钮网格(列=3,行=1)
退出按钮=按钮(主框架,text=“退出”,command=quit)
退出按钮网格(列=4,行=0)
删除行按钮=按钮(主框架,文本='删除行',命令=删除行)
删除行按钮。网格(列=4,行=3)
def entry():
全局名称\u条目
name\u entry=条目(主框架)
name\u entry.grid(列=1,行=0)
全局收据输入
收据输入=输入(主输入框)
收据\条目.grid(列=1,行=1)
全球租用单位进入
租用项目=项目(主框架)
网格(列=1,行=2)
全局雇用人数输入
num\u hired\u entry=条目(主框架)
num\u hired\u entry.grid(列=1,行=3)
全局删除\u行\u条目
删除行项目=项目(主框架)
删除行条目.grid(列=4,行=2)
def table_headers():
行标题=标签(主框架,text='row',font='Arial 10 bold')
行标题.grid(列=0,行=4)
客户标题=标签(主框架,文本='customer Name',字体='Arial 10 bold')
customer_header.grid(列=1,行=4)
收据标题=标签(主框架,文本=“收据编号”,字体=“Arial 10粗体”)
收据标题网格(列=3,行=4)
项目标题=标签(主框架,文本='item Hired',字体='Arial 10 bold')
项目标题网格(列=2,行=4)
num_header=标签(主框架,text='Number',font='Arial 10 bold')
num_header.grid(列=4,行=4)
def append_entry():
全局第二帧
第二帧=帧(主窗口)
第二个框架网格(列=0,行=6)
引线错误变量集(“”)
位置错误变量集(“”)
numcamper\u错误变量集(“”)
天气错误变量集(“”)
全局名称\u计数
name\u count=0
上面的全局行
上面的行=6
尝试:
name\u entry\u str=str(name\u entry.get())
雇用的条目\u str=str(雇用的条目.get())
receipt\u entry\u int=str(receipt\u entry.get())
num\u hired\u entry\u int=str(num\u hired\u entry.get())
如果len(name_entry.get())!=0:
输入数据列1.append([name\u entry\u str])
输入数据列2.append([hired\u entry\u str])
输入数据列3.append([receipt\u entry\u int])
输入数据列4.append([num\u hired\u entry\u int])
计数器['total_entries']+=1
打印(输入数据1)
打印(输入数据2)
打印(输入数据3)
打印(输入数据4)
而name_countfrom tkinter import *
global main_window
def quit():
main_window.destroy()
def entry_labels():
leader_label = Label(main_frame, text = 'Customer Name')
leader_label.grid(column=0, row=0)
location_label = Label(main_frame, text = 'Receipt Number')
location_label.grid(column=0, row=1)
numcampers_label = Label(main_frame, text = 'Item Hired')
numcampers_label.grid(column=0, row=2)
weather_label = Label(main_frame, text = 'Number Hired')
weather_label.grid(column=0, row=3)
row_label = Label(main_frame, text= 'Row')
row_label.grid(column=3, row=2)
def button():
print_button = Button(main_frame, text = "Print Details", command = append_entry)
print_button.grid(column=3, row=1)
quit_button = Button(main_frame, text= "Quit", command=quit)
quit_button.grid(column=4, row=0)
delete_row_button = Button(main_frame, text = 'Delete Row', command = delete_row)
delete_row_button.grid(column=4, row=3)
def entry():
global name_entry
name_entry = Entry(main_frame)
name_entry.grid(column=1, row=0)
global receipt_entry
receipt_entry = Entry(main_frame)
receipt_entry.grid(column=1, row=1)
global hired_entry
hired_entry = Entry(main_frame)
hired_entry.grid(column=1, row=2)
global num_hired_entry
num_hired_entry = Entry(main_frame)
num_hired_entry.grid(column=1, row=3)
global delete_row_entry
delete_row_entry = Entry(main_frame)
delete_row_entry.grid(column=4, row=2)
def table_headers():
row_header = Label(main_frame, text='Row', font = 'Arial 10 bold')
row_header.grid(column=0, row=4)
customer_header = Label(main_frame, text='Customer Name', font = 'Arial 10 bold')
customer_header.grid(column=1, row=4)
receipt_header = Label(main_frame, text='Receipt Number', font = 'Arial 10 bold')
receipt_header.grid(column=3, row=4)
item_header = Label(main_frame, text='Item Hired', font = 'Arial 10 bold')
item_header.grid(column=2, row=4)
num_header = Label(main_frame, text='Number Hired', font = 'Arial 10 bold')
num_header.grid(column=4, row=4)
def append_entry():
global second_frame
second_frame = Frame(main_window)
second_frame.grid(column=0, row=6)
leader_error_var.set("")
location_error_var.set("")
numcamper_error_var.set("")
weather_error_var.set("")
global name_count
name_count = 0
global ROWS_ABOVE
ROWS_ABOVE = 6
try:
name_entry_str = str(name_entry.get())
hired_entry_str = str(hired_entry.get())
receipt_entry_int = str(receipt_entry.get())
num_hired_entry_int = str(num_hired_entry.get())
if len(name_entry.get()) != 0:
input_data_col1.append([name_entry_str])
input_data_col2.append([hired_entry_str])
input_data_col3.append([receipt_entry_int])
input_data_col4.append([num_hired_entry_int])
counters['total_entries'] += 1
print(input_data_col1)
print(input_data_col2)
print(input_data_col3)
print(input_data_col4)
while name_count < counters ['total_entries']:
global name
name = Label(second_frame, text=(input_data_col1[name_count][-1])) ##using -1 selects the latest entry in the list
name.grid(column=1, row=name_count + ROWS_ABOVE, padx=50)
item = Label(second_frame, text=(input_data_col2[name_count][-1]))
item.grid(column=2, row=name_count + ROWS_ABOVE, padx=50)
row = Label(second_frame, text=name_count)
row.grid(column=0, row=name_count + ROWS_ABOVE, padx=60)
receipt = Label(second_frame, text=(input_data_col3[name_count][-1]))
receipt.grid(column=3, row=name_count + ROWS_ABOVE, padx=50)
num = Label(second_frame, text=(input_data_col4[name_count][-1]))
num.grid(column=4, row= name_count + ROWS_ABOVE, padx=50)
name_count += 1
name_entry.delete(0,END)
receipt_entry.delete(0,END)
hired_entry.delete(0,END)
num_hired_entry.delete(0,END)
except:
leader_error_var.set("Check inputs")
#location_error_var.set("please enter a valid num")
#numcamper_error_var.set("numcamper error test")
weather_error_var.set("")
name_entry.delete(0,END)
receipt_entry.delete(0,END)
hired_entry.delete(0,END)
num_hired_entry.delete(0,END)
def delete_row():
user_del =int(delete_row_entry.get())
counters['total_entries'] -= 1
input_data_col1.pop(user_del)
input_data_col2.pop(user_del)
input_data_col3.pop(user_del)
input_data_col4.pop(user_del)
data = [input_data_col1,input_data_col2,input_data_col3,input_data_col4]
for widget in second_frame.winfo_children():
widget.destroy()
append_entry()
print(input_data_col1)
print(input_data_col2)
print(input_data_col3)
print(input_data_col4)
def error_prevention():
#leader_error_var.set("leader error test")
#location_error_var.set("location error test")
#numcamper_error_var.set("numcamper error test")
#weather_error_var.set("weather error test")
#weather_error_var.set("_______________")
leader_error = Label(main_frame, textvariable = leader_error_var, fg = 'red')
leader_error.grid(column=2, row=0)
location_error = Label(main_frame, textvariable = location_error_var, fg = 'red')
location_error.grid(column=2, row=1)
numcamper_error = Label(main_frame, textvariable = numcamper_error_var, fg = 'red', width = 13)
numcamper_error.grid(column=2, row=2)
weather_error = Label(main_frame, textvariable = weather_error_var, fg = 'red')
weather_error.grid(column=2, row=3)
def main():
global main_window
main_window = Tk()
global input_data_col1
input_data_col1 = []
global input_data_col2
input_data_col2 = []
global input_data_col3
input_data_col3 = []
global input_data_col4
input_data_col4 = []
global input_data
input_data = []
global main_frame
main_frame = Frame(main_window)
main_frame.grid(row=0,column=0)
global counters
counters = {'total_entries':0, 'name_count':0}
#global number
#number = {'total_entries':0}
def stringvars():
global location_error_var
location_error_var = StringVar()
location_error_var.set("")
global numcamper_error_var
numcamper_error_var = StringVar()
numcamper_error_var.set("")
global leader_error_var
leader_error_var = StringVar()
leader_error_var.set("")
global weather_error_var
weather_error_var = StringVar()
leader_error_var.set("")
stringvars()
entry_labels()
entry()
error_prevention()
button()
table_headers()
main()
main_window.mainloop()
for widget in second_frame.winfo_children():
widget.destroy()
second_frame.pack()
for widget in second_frame.winfo_children():
widget.destroy()
second_frame.pack()
widget.grid(column=1,row=1,padx=(10,10),pady=(10,10))