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

Как обновлять содержимое окон в PyQt5?

20.02.2017, 16:39. Показов 9629. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем времени суток.
Я пишу небольшую программу, которая работает с базой данных, как Вы поняли, в ней реализованы несколько окон.
Например, в одном окне форма для добавления пользователя, а во втором отображается информация о пользователях из базы данных.
но вот проблема, после добавления пользователя, информация о нем во 2 окне не появляется, приходится перезагружать программу.
Как сделать так, чтоб при показе окна, информация обновлялась?
показываю окно с помощью .show()
вот как выглядит окно:
http://i12.pixs.ru/storage/5/7... 239571.png
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.02.2017, 16:39
Ответы с готовыми решениями:

Python PyQt5 GUI как обновлять текст?
Как в PyQt5 обновить текст в QLabel во время выполнения программы? label = "Test" self.title = QLabel(label, self) self.title.move(0,...

Как обновлять содержимое Label каждые n-секунд?
У меня есть сервер, на котором постоянно оновляются данные. Запрос который я отправляю - Джейсон строка...

Как обновлять содержимое Label каждые n-секунд
Как обновлять содержимое Label каждые n-секунд

11
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
21.02.2017, 10:36
Цитата Сообщение от DarkCrusade Посмотреть сообщение
после добавления пользователя, информация о нем во 2 окне не появляется,
А с чего бы она там должна появляться?
0
1 / 1 / 0
Регистрация: 10.11.2015
Сообщений: 29
21.02.2017, 12:56  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
А с чего бы она там должна появляться?
я спрашиваю, как сделать так, чтоб она добавилась
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
21.02.2017, 13:17
DarkCrusade, это зависит от того, как вы это запрограммируете.
А тут возможен мильён всяких вариантов. Очень важно, какие объекты используете. То ли QSqlQueryModel, то ли ещё что.
0
1 / 1 / 0
Регистрация: 10.11.2015
Сообщений: 29
21.02.2017, 16:10  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
То ли QSqlQueryModel, то ли ещё что.
у меня не с базой данных проблема. Добавление в базу я реализовал и все работает.
я в 1 окне добавляю поставщика и прописал, чтоб он добавил его в QComboBox, который у меня определен во 2 окне, но он его не добавляет, что не так?

Не могли бы Вы дать свой скайп, если он у Вас есть, чтоб я смог вам показать код?
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
21.02.2017, 16:57
DarkCrusade, не мог бы. И уже тем более я не буду разбираться в чужом коде с форума.

Я понял, что данные в базу у вас добавляются.
Но от добавления данных до обновления таблиц в Qt путь неблизкий, и я не понял, сделан ли на этом пути хоть один шаг. Да и варианты пути есть разные.
Вы даже не указали, какую Qt-шную вьюху используете.
0
1 / 1 / 0
Регистрация: 10.11.2015
Сообщений: 29
21.02.2017, 21:42  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
Но от добавления данных до обновления таблиц в Qt путь неблизкий, и я не понял, сделан ли на этом пути хоть один шаг.
в общем вот код:
Кликните здесь для просмотра всего текста
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
class ViewSupplier(QWidget):
 
    def __init__(self):
        super().__init__()
        self.supplier_text = QLabel()
        self.derector = QLineEdit()
        self.accountant = QLineEdit()
        self.inn = QLineEdit()
        self.bank_account = QLineEdit()
        self.tel = QLineEdit()
        self.fax = QLineEdit()
        self.address = QTextEdit()
        self.supplierlist = QComboBox()
        self.refactor = QPushButton("Редактировать")
        self.save = QPushButton("Сохранить")
        self.window()
 
    def activate(self, a):
        self.derector.setDisabled(False)
        self.accountant.setDisabled(False)
        self.inn.setDisabled(False)
        self.bank_account.setDisabled(False)
        self.tel.setDisabled(False)
        self.fax.setDisabled(False)
        self.address.setDisabled(False)
        self.supplierlist.setDisabled(True)
        self.save.setDisabled(False)
        self.refactor.setDisabled(True)
 
    def deactivate(self):
        self.derector.setDisabled(True)
        self.accountant.setDisabled(True)
        self.inn.setDisabled(True)
        self.bank_account.setDisabled(True)
        self.tel.setDisabled(True)
        self.fax.setDisabled(True)
        self.address.setDisabled(True)
        self.supplierlist.setDisabled(False)
        self.save.setDisabled(True)
        self.refactor.setDisabled(False)
 
    def onActivated(self, str):
        c = getContract(str)           # получаем данные о поставщике
 
        self.supplier_text.setText('Поставщик ' + self.supplierlist.currentText())
        self.supplier_text.setFont(QFont('calibri', 16))
 
        self.derector.setText(c.director)
        self.derector.setDisabled(True)
 
        self.accountant.setText(c.accountant)
        self.accountant.setDisabled(True)
 
        self.inn.setText(c.inn)
        self.inn.setInputMask('9999999999')
        self.inn.setDisabled(True)
 
        self.bank_account.setText(c.bank_account)
        self.bank_account.setDisabled(True)
 
        self.tel.setText(c.tel)
        self.tel.setInputMask('(999)999-99-99')
        self.tel.setDisabled(True)
 
        self.fax.setText(c.fax)
        self.fax.setInputMask('(999)999-99-99')
        self.fax.setDisabled(True)
 
        self.address.setText(c.address)
        self.address.setFont(QFont('ubuntu', 12))
        self.address.setFixedSize(440, 60)
        self.address.setDisabled(True)
 
    def window(self):
        self.setGeometry(400,100, 500, 400)
        self.setWindowIcon(QIcon('./Icon/edit1'))
        self.setWindowTitle('Данные о поставщиках магазина')
 
        ok = QPushButton("OK")
        cancel = QPushButton("Отменить")
        view_contract = QPushButton("Посмотреть договор")
        product = QPushButton("Постовляемый товар")
 
        self.save.setDisabled(True)
 
        ok.clicked.connect(self.update)
        self.refactor.clicked.connect(self.activate)
        self.save.clicked.connect(self.deactivate)
        cancel.clicked.connect(self.close)
 
 
        hbox1 = QHBoxLayout()
        hbox1.addStretch(0)
        hbox1.addWidget(ok)
        hbox1.addWidget(cancel)
 
        hbox2 = QHBoxLayout()
        hbox2.addStretch(0)
        hbox2.addWidget(self.refactor)
        hbox2.addWidget(self.save)
        hbox2.addWidget(view_contract)
        hbox2.addWidget(product)
 
        vbox = QVBoxLayout()
        vbox.addStretch(1)
        vbox.addLayout(hbox2)
        vbox.addLayout(hbox1)
 
        list = getSupplier() # получаем список поставщиков
 
        for l in list:
            self.supplierlist.addItem(l)   # Заполняем QComboBox
 
        self.onActivated(self.supplierlist.currentText())
        self.supplierlist.activated[str].connect(self.onActivated)
 
        flo = QFormLayout(self)
        flo.addRow(self.supplier_text)
        flo.addRow('Адрес', self.address)
        flo.addRow('ИНН', self.inn)
        flo.addRow('Банковский счет', self.bank_account)
        flo.addRow('Директор', self.derector)
        flo.addRow('Бухгалтер', self.accountant)
        flo.addRow('Телефон', self.tel)
        flo.addRow('Факс', self.fax)
        flo.addRow('Поиск', self.supplierlist)
        flo.addRow(vbox)


Функция window выполняется при открытие программы и как добавлять снова содержимое в QComboBox не знаю. открываю данное окно в Главном окне через меню:
Python
1
viewsupplier.triggered.connect(self.viewSupplier.show)
если я что-то делаю не так, то объясните, что именно.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
22.02.2017, 11:09
DarkCrusade, я вообще не понял, что вы делаете.
Представлением данных, или, по простому, их показом, в Qt занимаются вьюхи. То есть views. То есть наследники QAbstractItemView.
Я ожидал увидеть хоть одну и не увидел. Чему обновляться-то?
Может, конечно, плохо искал, но тогда объясните мне, невнимательному, словами, обновления чего вы ожидаете.
0
1 / 1 / 0
Регистрация: 10.11.2015
Сообщений: 29
22.02.2017, 12:12  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
я вообще не понял, что вы делаете.
Мне надо в одном окне добавить поставщика и чтоб во втором окне в QComboBox добавился новый пункт с этим поставщиком, как еще объяснить, что хочу сделать я не знаю.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
22.02.2017, 12:31
Цитата Сообщение от DarkCrusade Посмотреть сообщение
Мне надо в одном окне добавить поставщика и чтоб во втором окне в QComboBox добавился новый пункт с этим поставщиком, как еще объяснить, что хочу сделать я не знаю.
Ясно. Тогда советую начать с азов.
Использование моделей в Qt, гуглите.

Вот хорошая статья https://habrahabr.ru/post/171443/ , первая ссылка.
Но это для тех, кто уже понял, что в Qt есть QStatdardItemModel, и в чём её недостатки. Почему лучше использовать абстрактные модели.
0
1 / 1 / 0
Регистрация: 10.11.2015
Сообщений: 29
25.02.2017, 19:43  [ТС]
Если кому будет интересен данный вопрос, то решение довольно таки простое:
Надо было в конструктор окна добавления параметром передать окно просмотров, вот и все решение.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
27.02.2017, 09:20
DarkCrusade,
"кто молодец? я молодец!" (с)

Вы правда делаете отображение данных без вьюхи? В таком случае, к сожалению, у вас костыльный говнокод.
Qt - зашибенный фреймфорк для работы с данными, и не использовать его возможности - не лучший путь.

В частности, по поводу вот этого:
Цитата Сообщение от DarkCrusade Посмотреть сообщение
чтоб во втором окне в QComboBox добавился новый пункт
Qt позволяет создать абстрактную модель, которая будет ссылаться на список ваших поставщиков в БД, и засунуть её в комбобокс.
Вам не придётся заниматься ручной синхронизацией вообще. А это круто. Сейчас вы занимаетесь ручной синхронизацией. Во-первых, любые ручные действия чреваты ошибками. Во-вторых, это работа. Будете добавлять новые таблицы - также будете синхронизировать базу с отображением?

Поверьте, модели в Qt стоят того, чтобы научиться с ними работать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.02.2017, 09:20
Помогаю со студенческими работами здесь

Как по клику кнопки обновлять содержимое динамически создаваемого ДатаГрида?
Всем доброго времени суток! Прошу не забрасывать сразу яйцами и помидорами!!! Короче, пытаюсь начинать кой-какое офисное приложение и...

Смена окон в PyQt5
Есть 3 класса MainWindow - основное окно. LoginWidget - виджет авторизации HomeWidget - домашний виджет (после авторизации) ...

PyQT5 - кодировка диалоговых окон
Уважаемые форумчане, прошу помощи. Ниже код, где я через QInputDialog получаю строку и пишу ее в файл. import sys from...

Как скопировать содержимое всех открытых окон
У меня открыто несколько окон, окна свернуты. Нужно программно каждое окно сохранить в файлы BMP (сохранить картинки). Очень сильно...

Как сохранить содержимое окон memo и надписи на форме в один файл?
Пытался сохранить содержимое формы в виде таблицы, но получается нагромождение. Можно как-то выстроить данные и надписи над окнами memo в...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru