Can I make a UI button that makes buttons in a Panel?
Of course you can delete or replace items from Collection property. Here are functions available to it:

add(
as_bytes(
clear(
data
find(
foreach_get(
foreach_set(
get(
id_data
items(
keys(
move(
path_from_id(
remove(
rna_type(
update(
values(


So lets say we have this: bpy.context.scene.collection Collection property with some items:

bpy.context.scene.collection.remove(5)    # will remove 6th element
bpy.context.scene.collection.move(2,3)    # will swap 3rd and 4th

# replace 5th element with a new one - just assign it new values:
bpy.context.scene.collection[4].name = "New name"
bpy.context.scene.collection[4].value = 42


So the script should work like this:


your Add button will add entries to the collection property
the UI will draw a button for each item of the collection property
every generated button will call the same operator, but will pass it a unique identifier
the operator does different things based on the identifier property


An example:

import bpy

class SceneItems(bpy.types.PropertyGroup):
    value = bpy.props.IntProperty()

class AddButtonOperator(bpy.types.Operator):
    bl_idname = "scene.add_button_operator"
    bl_label = "Add Button"

    def execute(self, context):
        id = len(context.scene.collection)
        new = context.scene.collection.add()
        new.name = str(id)
        new.value = id
        return {'FINISHED'}

class ButtonOperator(bpy.types.Operator):
    bl_idname = "scene.button_operator"
    bl_label = "Button"

    id = bpy.props.IntProperty()

    def execute(self, context):
        print("Pressed button ", self.id)
        return {'FINISHED'}

class FancyPanel(bpy.types.Panel):
    bl_label = "Fancy Panel"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'UI'

    def draw(self, context):
        self.layout.operator("scene.add_button_operator")
        for item in context.scene.collection:
               self.layout.operator("scene.button_operator", text="Button #"+item.name).id = item.value

bpy.utils.register_class(SceneItems)
bpy.utils.register_class(AddButtonOperator)
bpy.utils.register_class(ButtonOperator)
bpy.utils.register_class(FancyPanel)

bpy.types.Scene.collection = bpy.props.CollectionProperty(type=SceneItems)




Edit @Lars comment: How can I have multiple input fields for each new entry, i.e. having an Integer input field next to each button that will deliver the Value to the buttons operator once the button is pressed?

You display the values of the Collection property items in the UI, and the user can change them. They get passed to the operator:

def draw(self, context):
    self.layout.operator("scene.add_button_operator")
    for item in context.scene.collection:
       row = self.layout.row(align=True)
       row.prop(item, "value")
       row.operator("scene.button_operator", text="Button #"+item.name).id = item.value