Storing the contents of text fields and inserting the stored values on button-click
Your implementation of Storage lends itself nicely to using a dataclass.
from dataclasses import dataclass

@dataclass
class Storage:
    field1: str = &quot;&quot;
    field2: int = -1
    field3: str = &quot;&quot;

This makes your class definition really concise and readable and provides improved scalability and convenient implementations of built-in functions if you ever need them.
You should also consider giving fields and widgets more meaningful names (maybe even changing button text to match their functionality) to improve readability and usability.
Further material on dataclasses:

Data Classes in Python 3.7+ (Guide) on RealPython
Python dataclasses on Youtube by mCoding


The way you create the three buttons does not scale well, changing this part will have to be done by hand and is therefore error-prone. I'm talking about this code snippet:
btn_1 = QPushButton('Button 1')
btn_2 = QPushButton('Button 2')
btn_3 = QPushButton('Button 3')

for w in [btn_1, btn_2, btn_3]:
    w.setProperty('data', Storage())
    w.setCheckable(True)
    w.clicked.connect(self.set_data)
    self.btn_group.addButton(w)
    h_layout.addWidget(w)

I find the following approach to be a lot cleaner, while producing the same result. You basically only need to change the stop argument in range(start, stop) if you want to change the amount of buttons:
for i in range(start=1, stop=4):
    btn = QPushButton(f&quot;Button {i}&quot;)
    btn.setProperty('data', Storage())
    btn.setCheckable(True)
    btn.clicked.connect(self.set_data)

    self.btn_group.addButton(btn)
    h_layout.addWidget(btn)

    setattr(self, f&quot;btn_{i}&quot;, btn)


I'm sure there's a better way to set up update_storage and set_data without hardcoding the widgets, but I didn't think of a satisfactory approach yet.