Уведомления

Группа в Telegram: @pythonsu

#1 Март 6, 2024 07:49:40

tamazav
Зарегистрирован: 2023-01-17
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

обращение к динамически созданным объектам

Добрый день!

По циклу создаются QLineEdit. В зависимости от вводимых параметров их количество может быть разным (например выбрали количество 2, нажали на кнопку и создается динамически 2 QLineEdit)
Вопрос: как можно обратиться к конкретному QLineEdit, чтобы получить значение введеное в конкретный QLineEdit?

Офлайн

#2 Март 6, 2024 08:09:56

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

обращение к динамически созданным объектам

Ну вы в списке заполняете? Из него по индексу и хватайте
Либо словарь создайте и по ключу потом
Невидя что там у вас за код - тяжело дать вразумительный совет



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Март 6, 2024 08:23:05

tamazav
Зарегистрирован: 2023-01-17
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

обращение к динамически созданным объектам

 	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, чтобы соотнести с уже заполненными автоматически данными, чтобы обработать уже в другой функции

Офлайн

#4 Март 6, 2024 08:57:09

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

обращение к динамически созданным объектам

Ну вот смотрите
Сейчас вы в цикле создаете поля
А вам нужно немного разнести порядок создания
создайте в цикле словарь где 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.")



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#5 Март 6, 2024 12:03:11

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2740
Репутация: +  183  -
Профиль   Отправить e-mail  

обращение к динамически созданным объектам

> По циклу создаются QLineEdit

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



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#6 Март 6, 2024 12:40:55

tamazav
Зарегистрирован: 2023-01-17
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

обращение к динамически созданным объектам

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

Спасибо, хорошая идея

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version