Уведомления

Группа в 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
Сообщения: 2763
Репутация: +  185  -
Профиль   Отправить 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 пользуйся ими.

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

Офлайн

#7 Фев. 18, 2025 13:37:05

natalieportman
Зарегистрирован: 2025-02-18
Сообщения: 2
Репутация: +  -2  -
Профиль   Отправить e-mail  

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

Сохраняйте динамически созданные виджеты `QLineEdit` в списке или словаре для легкого доступа. Используйте `self.line_edits.text()`, чтобы получить определенное значение, если они хранятся в `list, или self.line_edits.text()`, если они хранятся в словаре. Убедитесь, Buckshot Roulette что старые виджеты удалены перед созданием новых, чтобы предотвратить утечки памяти.

Офлайн

#8 Март 24, 2025 10:12:06

otis5842
Зарегистрирован: 2025-03-24
Сообщения: 2
Репутация: +  -2  -
Профиль   Отправить e-mail  

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

Вы задали отличный вопрос, который показывает ваше стремление к гибкости и динамичности в создании пользовательского интерфейса! Динамическое создание QLineEdit — это мощный инструмент в Qt, и умение правильно обращаться к ним делает код более элегантным и Stickman Hook удобным. Один из удобных способов — хранить созданные QLineEdit в списке (list) или в словаре (dict), что позволяет легко получить доступ к нужному элементу.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version