Найти - Пользователи
Полная версия: обращение к динамически созданным объектам
Начало » Python для новичков » обращение к динамически созданным объектам
1
tamazav
Добрый день!

По циклу создаются QLineEdit. В зависимости от вводимых параметров их количество может быть разным (например выбрали количество 2, нажали на кнопку и создается динамически 2 QLineEdit)
Вопрос: как можно обратиться к конкретному QLineEdit, чтобы получить значение введеное в конкретный QLineEdit?
ZerG
Ну вы в списке заполняете? Из него по индексу и хватайте
Либо словарь создайте и по ключу потом
Невидя что там у вас за код - тяжело дать вразумительный совет
tamazav
 	def izWord(self):
		key=[]
		sch=7
		doc = docx.Document('shablon.docx')
		for p in doc.paragraphs:
			rrr = re.findall(r'\{\{(.*?)\}\}',p.text)
			for el in rrr:
				if (rrr):
					self.line_din_prav = QLineEdit(text=''.join(map(str,el)),readOnly=True)
					self.grid.addWidget(self.line_din_prav,sch+1,1)
					key.append(self.line_din_prav.text())
					with open('vrem.txt','w') as f:
						f.write(str(','.join(map(str,key))))
					self.line_din_lev = QLineEdit(text='')
					self.grid.addWidget(self.line_din_lev,sch+1,0)
					sch=sch+1
			f.close()

С шаблона достаются ключи (текст). В зависимости от количества ключей создаются динамически QLineEdit. Они заполняются в QLineEdit и не редактируются. Затем значения заносятся в текстовый файл). Но, рядом создаются другие QLineEdit в том же количестве. Эти поля заполняются пользователем. Мне нужно отловить значения занесенное в определенный QLineEdit, чтобы соотнести с уже заполненными автоматически данными, чтобы обработать уже в другой функции
ZerG
Ну вот смотрите
Сейчас вы в цикле создаете поля
А вам нужно немного разнести порядок создания
создайте в цикле словарь где el это ключ а значение это QLineEdit(…)

А далее вы по словарю уже сможете обращаться к обьектам. То есть словарь у вас будет содержать не ключ - значение а ключ - обьект

После того как заполнили словарь, вы уже проходитесь по нему другим циклом и добавляете обьекты виджет
Соотвтественно - потом используя этот же словарь вы сможеет обращаться к обьектам по тем же ключам что и добавлялись в виджет

не уверен что код ниже. работает - это генеренка(нет желания тянуть кутю)
Но из него понятна идея

 import docx
import re
from PyQt5.QtWidgets import QLineEdit, QGridLayout, QWidget
class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.grid = QGridLayout(self)
        self.qlines = {}  # Dictionary to store QLineEdit objects
        self.izWord()
    def izWord(self):
        key = []
        sch = 7
        doc = docx.Document('shablon.docx')
        for p in doc.paragraphs:
            matches = re.findall(r'\{\{(.*?)\}\}', p.text)
            for el in matches:
                line_edit = QLineEdit(text=el, readOnly=True)
                self.grid.addWidget(line_edit, sch + 1, 1)
                self.qlines[el] = line_edit  # Store QLineEdit object by key
                key.append(el)
                # Assuming no need to create QLineEdit objects here
                # self.line_din_lev = QLineEdit(text='')
                # self.grid.addWidget(self.line_din_lev, sch + 1, 0)
                sch += 1
        with open('vrem.txt', 'w') as f:
            f.write(','.join(key))
    def get_text(self, key_name):
        """Retrieves the text from the QLineEdit object with the given key.
        Args:
            key_name (str): The key used to store the QLineEdit object in the qlines dictionary.
        Returns:
            str: The text from the QLineEdit object, or None if the key is not found.
        """
        return self.qlines.get(key_name)  # Use get() with default None
# Example usage
window = MyWindow()
window.show()
text = window.get_text("key_name")  # Replace "key_name" with the actual key
if text:
    print(text)
else:
    print("Key not found in qlines dictionary.")
Rodegast
> По циклу создаются QLineEdit

Не нужно так делать! У тебя есть QTableWidget/View и QTreeWidget/View пользуйся ими.
tamazav
Не нужно так делать! У тебя есть QTableWidget/View и QTreeWidget/View пользуйся ими.

Спасибо, хорошая идея
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB