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

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

12.08.2015, 00:38. Показов 5718. Ответов 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 / 2083 / 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
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru