मैं सिर्फ यह जानना चाहता हूं कि 'मान निष्पादित करें' बटन पर क्लिक करने के बाद सभी क्यूलाइन संपादन टेक्स्ट से सभी मूल्यों को कैसे स्टोर किया जाए, अभी तक, केवल हाल ही में मूल्य लेता है, सभी इनपुट के माध्यम से कैसे पुन: प्रयास करें और इसे सभी व्यक्तिगत चर लें :

def __init__(self):
    super().__init__()
    self.title = 'Sample Dynamic LineEdit'
    self.left = 150
    self.top = 150
    self.width = 400
    self.height = 500
    self.i = 40
    self.j = 80
    self.counter = 1
    self.initUI()

def initUI(self):
    self.setWindowTitle(self.title)
    self.setGeometry(self.left, self.top, self.width, self.height)

    # Create textbox
    # self.textbox = QLineEdit(self)
    # self.textbox.move(20, 20)
    # self.textbox.resize(280, 40)

    # Create a button in the window
    self.button = QPushButton('Add Line Edit', self)

    # connect button to function on_click
    self.button.clicked.connect(self.on_click)
    self.show()
    pybutton = QPushButton('Execute the entered values', self)
    pybutton.clicked.connect(self.text_click)
    pybutton.resize(160, 35)
    pybutton.move(150, 0)
    pybutton.show()

@pyqtSlot()
def on_click(self):
    # this creates a new field and label everytime the button is clicked
    self.textbox = QLineEdit(self)
    self.textbox2 = QLineEdit(self)

    self.label = QLabel(self)
    self.label.setText(str(self.counter))
    self.label.move(5, self.i)
    self.button.move(20, self.j)
    self.textbox.move(20, self.i)
    self.textbox.resize(160, 40)
    self.textbox2.move(250, self.i)
    self.textbox2.resize(160, 40)

    # dynamic object names
    self.textbox.setObjectName("text" + str(self.counter))
    self.textbox.show()
    self.textbox2.show()
    self.label.show()
    self.i += 40
    self.j += 40
    self.counter += 1
    print(self.textbox.objectName())

def text_click(self):
    first = self.textbox.text()
    
    print('Your name: ' + first)
    second = self.textbox2.text()
    print('Your name: ' + second)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())
-1
Nishad Nazar 22 सितंबर 2020, 10:19

1 उत्तर

सबसे बढ़िया उत्तर

आप प्रत्येक QLineEdit को एक नाम दे सकते हैं और फिर उन्हें एक्सेस करने के लिए findChild का उपयोग कर सकते हैं:

    ...
    # dynamic object names
    self.textbox.setObjectName("text_" + str(self.counter))
    self.textbox2.setObjectName("text2_" + str(self.counter))
    ...

def text_click(self):
    for i in range(1, self.counter):
        first = self.findChild(QLineEdit, "text_" + str(i)).text()

        print('Your name: ' + first)
        second = self.findChild(QLineEdit, "text2_" + str(i)).text()
        print('Your name: ' + second)

लेकिन IMHO केवल QLineEdit ऑब्जेक्ट्स को सादे सूचियों में जोड़ना अधिक सरल है:

...
    self.counter = 1
    self.textboxes = []
    self.textboxes2 = []
    self.initUI()
...
@Slot()
def on_click(self):
    # this creates a new field and label everytime the button is clicked
    textbox = QLineEdit(self)
    textbox2 = QLineEdit(self)
    self.textboxes.append(textbox)
    self.textboxes2.append(textbox2)

    label = QLabel(self)
    label.setText(str(self.counter))
    label.move(5, self.i)
    self.button.move(20, self.j)
    textbox.move(20, self.i)
    textbox.resize(160, 40)
    textbox2.move(250, self.i)
    textbox2.resize(160, 40)

    # dynamic object names
    textbox.setObjectName("text_" + str(self.counter))
    textbox2.setObjectName("text2_" + str(self.counter))
    textbox.show()
    textbox2.show()
    label.show()
    self.i += 40
    self.j += 40
    self.counter += 1
    print(textbox.objectName())

def text_click(self):
    for i in range(self.counter - 1):
        first = self.textboxes[i].text()

        print('Your name: ' + first)
        second = self.textboxes2[i].text()
        print('Your name: ' + second)
...

पायथन में, किसी वस्तु को सूची में संग्रहीत करना सस्ता है, क्योंकि सूची में केवल वस्तु का संदर्भ होगा। यहां केवल नकारात्मक पक्ष यह है कि क्यूटी ऑब्जेक्ट्स आंतरिक रूप से सी ++ ऑब्जेक्ट्स हैं जिन्हें उनके पायथन संदर्भ से स्वतंत्र रूप से नष्ट किया जा सकता है। इसलिए आपको इस बात का ध्यान रखना होगा कि एक बार वे नष्ट हो जाने पर उनका उपयोग न करें।

1
Serge Ballesta 22 सितंबर 2020, 16:25