С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/29: Рейтинг темы: голосов - 29, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 30.10.2012
Сообщений: 82

Динамическое создание QLineEdit и label

12.08.2015, 00:38. Показов 5634. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Я начал делать форму без QtDesigner, задача состояла в том, что нужно сделать порядка 35 label и рядом с ними 35 QLineEdit (ну и кнопку, чтоб их отослать куда-то, например, во всплывающее окошко или консоль). "Ну а чё" -- подумал я, и начал писать.
В итоге получилось что-то вроде этого:
Python
1
2
3
4
5
6
7
8
9
10
11
12
class MyWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
 
        self.tabs = QtGui.QTabWidget()
        label_name1 = QtGui.QLabel("Введите плюшки: ")
        self.name1 = QtGui.QLineEdit()
        label_name2 = QtGui.QLabel("Введите баранки: ")
        self.name2 = QtGui.QLineEdit()
        label_name3 = QtGui.QLabel("Введите бублики: ")
        self.name3 = QtGui.QLineEdit()
        ...
И, помимо всего прочего, добавление всех этих штук в слой:
Python
1
2
3
4
5
6
7
8
vbox = QtGui.QGridLayout()
        vbox.addWidget((label_name1), 0, 0)
        vbox.addWidget((self.name1), 0, 1)
        vbox.addWidget((label_name2), 1, 0)
        vbox.addWidget((self.name2), 1, 1)
        vbox.addWidget((label_name3), 2, 0)
        vbox.addWidget((self.name3), 2, 1)
        ...
И таких штук 35.
Изначально понимая, что это как-то по-дурацки, я сразу как начал писать сие, порешил потом отвести под эту функцию какой-нибудь файлик "other.py", чтоб не захламлять место понапрасну, тем не менее, оставить всё как есть, ибо мне, как новичку, сейчас важно, чтоб хоть что-нибудь да заработало.
На двадцать третьем где-то QLineEdit и QLabel мне это надоело + начала выскакивать ошибка в интерпретаторе, если я верно понял, о том, что нужно теперь все переформатировать в формат матрицы 3*3, а не 2*2, как у меня сейчас (ибо захотел создать еще один столбик).
Итак, вопрос: а можно сделать так, чтобы QLineEdit и label создавались автоматически, а я просто вводил названия от этих label`ов? Или без Designer это уже в принципе нереально?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.08.2015, 00:38
Ответы с готовыми решениями:

Динамическое создание компонентов Trackbar и Label. Записать значение из TrackBar в Label
Доброго времени суток! Ситуация следующая: нужно создать некоторое количество трэкбаров (количество задается пользователем) и иметь...

Динамическое создание Label?
При таком раскладе все равно не отображается текст Label'а на форме. Почему перед типом Form отсутствует значок &, а у Label...

Динамическое создание Label
Нужно чтоб по нажатию кнопки мыши в том мести появлялась надпись пункт1, пункт2 и т.д. Думаю надпись выводить через Label. Ну только как...

3
Фрилансер
 Аватар для Black Fregat
3709 / 2082 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
12.08.2015, 00:59
Что мешает сделать цикл?
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
12.08.2015, 01:18
Лучший ответ Сообщение было отмечено Timebird как решение

Решение

Да ну все в принципе тривиально:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from PyQt4 import QtGui, QtCore
 
 
class MyWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
 
        self.main_layout = QtGui.QGridLayout()
        self.setLayout(self.main_layout)
 
        self.widgets = []
        self.build_widgets()
 
    def build_widgets(self):
        names = ('плюшки', 'баранки', 'бублики')
 
        for row, i in enumerate(names):
            label = QtGui.QLabel("Введите {}: ".format(i))
            self.main_layout.addWidget(label, row, 0)
 
            line_edit = QtGui.QLineEdit()
            self.main_layout.addWidget(line_edit, row, 1)
 
            self.widgets.append((label, line_edit))
 
        show = QtGui.QPushButton('Вывести содердимое полей')
        show.clicked.connect(self.show_content)
        self.main_layout.addWidget(show, len(names) + 1, 0)
 
    def show_content(self):
        for label, line_edit in self.widgets:
            print('{} {}'.format(label.text(), line_edit.text()))
 
 
 
app = QtGui.QApplication([])
win = MyWindow()
win.show()
app.exec_()

Цитата Сообщение от Timebird Посмотреть сообщение
Или без Designer это уже в принципе нереально?
Designer это просто средство автоматизированного создания gui, он не может уметь больше самой библиотеки или как в данном случае самого языка (имею ввиду, что динамическое создание виджетов это всего лишь использование циклов). Так что этот вопрос просто абсурден.
Кстати если использовать Designer как раз все будет наоборот, ты будешь как дурак сидеть и накидывать на форму все свои 100500 виджетов.
Я вообще лично руками и ногами против него, потому что он генерит кривой код, в котором много всего лишнего, ну если использовать ui файлы, то код становиться более трудно читать + если создаётся реально большое приложение то дизайнер будет только мешать, ИМХО.
1
0 / 0 / 0
Регистрация: 30.10.2012
Сообщений: 82
17.08.2015, 15:58  [ТС]
Спасибо, буду разбираться..!

Добавлено через 6 минут
Пока что появился еще один вопрос.
Для этих самых полей пишу "защиту от дурака" по книге Прохоренок.
Нужно написать валидатор, который блокирует любые символы, кроме чисел на отрезке [0.00, 15.34].
Вопрос: почему такой метод не работает?

Python
1
2
validator_a = QtGui.QDoubleValidator(0.00, 15.34, 2, self)
validator_a.setNotation(QtGui.QDoubleValidator.StandardNotation)
P.S. C QIntValidator всё ок).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.08.2015, 15:58
Помогаю со студенческими работами здесь

Динамическое создание label-ов
Всем привет. Хочу сделать так, что бы при нажатии кнопки создавался определенный лейб, который заполнялся бы данными полей. И повторное...

Динамическое создание Label
вызываю функцию CreateLabels(new { 17, 17 }, new { 13, 78 }, new { "Поиск по фамилии", "Поиск по классу" }); сама функция ...

Динамическое создание Label
При динамическом создание Label-ов, они не видны, я так понял причина в том, что на форме расположена панель под которой прячутся мои...

Динамическое создание Label
Здравствуйте. Мне нужно динамически создать лейб. написал код, но в форме ничего нет. Подскажите в чем тут проблема. public void...

Динамическое создание Label
Нужно создать программу, которая будет добавлять на форму метки с текстом. Местоположение и размеры меток определяются в программе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru