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

Как отобразить новый Label в уже отрисованном окне?

18.07.2023, 02:38. Показов 801. Ответов 3

Студворк — интернет-сервис помощи студентам
Я пишу простую программу, которая принимает ссылку, парсит изображение и текст по ссылке, после записывает спаршенный текст в бд. При запуске, программа должна отобразить изображение и текст в интерфейсе, я пытаюсь отобразить текст и изображение сразу после парсинга, т.е в уже открытом интерфейсе, а не только после перезапуска. Для этого я запускаю функцию для отрисовки label сразу после парсинга, я несколько раз проверял и точно убедился что изображение и текст успевают спарситься и сохраниться, но не отрисовываются в интерфейсе, как это можно исправить? Вот код

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
import sys 
from PySide6 import QtWidgets, QtGui, QtCore
from PySide6.QtWidgets import QApplication, QMainWindow, QHBoxLayout, QLabel, QVBoxLayout
from main_v1 import Ui_LIBRFILM
from newfilm_v1 import Ui_Dialog
from PySide6.QtGui import QPixmap, QIcon, QPainter, QBitmap, QFont
from PySide6.QtUiTools import QUiLoader
from PySide6.QtCore import QPoint, Qt, QRect
 
 
from parse import parse_new_film
from conDB import add_film, read_db
 
 
class libr(QMainWindow):
    def __init__(self):
        super(libr, self).__init__()
        self.ui = Ui_LIBRFILM()
 
        self.ui.setupUi(self)
 
        self.ui.pushButton.clicked.connect(self.add_film_new_wind)
 
    def labels(self):
        row = read_db()
        
 
        
 
        len_row = (len(row))
        xx = 0
        yy= -1
 
        move_x = 15
        move_y = 15
 
        move_x_b = 0
        move_y_b = 0
        while xx != len_row:
            yy = yy+1
            name = row[yy][0]
            print(name)
            
            self.initUI(name, move_x, move_y, move_x_b, move_y_b)
  
 
            move_x = move_x + 215 #максимум 1735
            if move_x>1735:
                move_x = 15
                move_y = move_y + 325
            xx = xx+1
            move_x_b = move_x+215
            if move_x_b>1735:
                move_x_b = 15
                move_y_b = move_y_b + 330
 
 
 
 
 
    def add_film_new_wind(self):
        self.new_window = QtWidgets.QDialog()
        self.ui_window = Ui_Dialog()
        self.ui_window.setupUi(self.new_window)
        self.new_window.show()
        self.ui_window.pushButton1.clicked.connect(self.film)
 
    def film(self):
        a = self.ui_window.textEdit.toPlainText()
        name = parse_new_film(a)
        add_film(name)
        self.labels()
        self.new_window.close()
 
    def initUI(self, name, move_x, move_y, move_x_b, move_y_b):
        label_png = QLabel(self)
        label_name = QLabel(self)
 
 
        # Text label
        print(name)
        label_name.setText(label_name.text()+name)
        label_name.move(move_x+10, move_y+275)
        label_name.setFont(QtGui.QFont("Arial", 10, QFont.Bold))
        label_name.resize(151, 35)
        label_name.setWordWrap(True)
        label_name.setStyleSheet("color: rgb(255,255,255)")
        label_name.setAlignment(Qt.AlignCenter)
 
 
 
        # PNG Label
        pixmap = QPixmap("posters/"+name+'.png')
        label_png.setPixmap(pixmap)
 
        label_png.setScaledContents(True)
        label_png.move(move_x, move_y)
        label_png.resize(171, 271)
        rounded_rect = QtGui.QPainterPath()
        rounded_rect.addRoundedRect(QtCore.QRectF(0, 0, label_png.width(), label_png.height()), 25, 25)
        mask = QtGui.QRegion(rounded_rect.toFillPolygon().toPolygon())
        label_png.setMask(mask)
 
 
 
        
    
 
 
        
        self.ui.pushButton.move(move_x_b, move_y_b)
        
 
    
    
 
if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = libr()
    window.labels()
    window.show()
    
    sys.exit(app.exec())
Функция labels определяет координаты для отрисовки label и запускает функцию initUI
Функция add_film_new_wind это функция для нового диалогового окна(оно принимает ссылку) и привязки к функции film
Функция film получает ссылку, отправляет в другую функцию для парсинга, получает текст (имя изображения=текст), записывает текст в бд, и вызывает labels для отрисовки всех label, включая новый, только добавленный label (который не получается отрисовать)
Функция initUI отрисовывает все label

Почему функция film не добавляет новый label, как это исправить? Кстати, после перезапуска программы этот label добавляется, мне кажется проблема в том, что интерфейс никак не обновляется из за чего label не видно, я пытался закрывать интерфейс и открывать, перезагружать label, писал отдельную функцию для отрисовки последнего добавленного label а не всех сразу, но исправить проблему не получилось. Буду очень благодарен за любую помощь, заранее спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.07.2023, 02:38
Ответы с готовыми решениями:

Как рисовать на уже отрисованном QGraphicsItem?
QGraphicsLineItem *myLine = scene->addLine(10,10,25,25,QPen(Qt::black,3)); Подскажите, как после этого хотя бы цвет линии поменять.

Событие, возникающие когда контролы расположились на форме в отрисованном окне
Когда все контролы инициализированы возникает событие Loaded. private void Window_Loaded(object sender, RoutedEventArgs e) { ...

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

3
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
18.07.2023, 08:09
sevostei, для начала почитай про область видимости переменных. Потом почитай что такое поля класса и их отличие от обычных переменных.
2
0 / 0 / 0
Регистрация: 21.12.2022
Сообщений: 3
18.07.2023, 16:23  [ТС]
Для того что бы отобразить новый label его нужно было создать отдельно и использовать label.show(). Но я не понял причем тут область видимости переменных и поля класса?
0
290 / 205 / 68
Регистрация: 18.09.2019
Сообщений: 407
Записей в блоге: 58
19.07.2023, 11:11
sevostei, однако iSmokeJC прав. Не получится нахрапом с дизайнером наперевес сделать то, что Вы хотите без понимания происходящих процессов. Ладно я помню, что когда-то что-то подобное делал. Там правда PyQt5, но переделать под PySide6 можно без проблем. Проверить-то сейчас не могу, но вроде криминала особого нет, должно работать:

dcp_005.py:
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
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""Dynamic Central Probe v0.005
 
Добавление и удаление дочерних виджетов в центральный виджет
по запросу пользователя (имитатор).
"""
 
import sys, random
from PySide6.QtGui import QCursor
from PySide6.QtCore import QTimer
from PySide6.QtWidgets import QApplication
from PySide6.QtWidgets import QWidget, QPushButton
from PySide6.QtWidgets import QHBoxLayout, QVBoxLayout
from PySide6.QtWidgets import QMainWindow, QProgressBar
 
APP_NAME = "Dynamic Central Probe v0.005"
 
class Progressbar_for_imitator(QProgressBar):
    def to_next_value(self):
        self.setValue(self.value() + 1)
 
class Probe_main_window(QMainWindow):
    """Главное окно приложения
    """
    def __init__(self, parent=None):
        super(Probe_main_window, self).__init__(parent)
        self.init_ui()
 
    def init_ui(self):
        self.setWindowTitle(APP_NAME)
        self.statusBar()
        self.central_widget = QWidget(self)
        add_button = QPushButton("Пуск", self)
        hbox = QHBoxLayout()
        hbox.addWidget(add_button)
        hbox.addStretch(1)
        self.central_widget.vbox = QVBoxLayout()
        main_box = QVBoxLayout()
        main_box.addLayout(self.central_widget.vbox)
        main_box.addStretch(1)
        main_box.addLayout(hbox)
        self.central_widget.setLayout(main_box)
        self.setCentralWidget(self.central_widget)
        add_button.clicked.connect(self.to_add_progressbar)
 
        # Центруем и меняем размеры окна под экран, на котором находится
        # указатель мыши (необходимо для Linux и Windows не портит)
        selected_screen = QApplication.screenAt(QCursor.pos())
        current_geo = selected_screen.availableGeometry()
        self.move(current_geo.x() + current_geo.width() // 4,
                  current_geo.y() + current_geo.height() // 4)
        self.resize(current_geo.width() // 2,
                    current_geo.height() // 2)
 
    def to_add_progressbar(self):
        pbar = Progressbar_for_imitator(self)
        pbar.setRange(0, random.randint(1, 10)*10)
        pbar.valueChanged.connect(self.to_pbar_valuechanged)
        pbar.setValue(0)
        self.central_widget.vbox.addWidget(pbar)
 
    def to_pbar_valuechanged(self, value):
        if value < self.sender().maximum():
            QTimer.singleShot(random.choice([100,150,200]),
                              self.sender().to_next_value)
        else:
            self.central_widget.vbox.removeWidget(self.sender())
            self.sender().deleteLater()
 
if __name__ == "__main__":
    app = QApplication(sys.argv)
    mwin = Probe_main_window()
    mwin.show()
    sys.exit(app.exec_())
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.07.2023, 11:11
Помогаю со студенческими работами здесь

При наведении курсора на изображение в одном окне, отобразить ее свойства в другом окне
Постановка задачи следующая: Имеется главное окно. По кнопке открывает еще два окна: &lt;html&gt; &lt;head&gt; &lt;meta...

Меняется текст Label'a в первом окне при изменении пункта comboBox во втором окне
Добрый день. Никак не могу пофиксить баг (или не баг, а глупость). Есть главное окно StartWindow, с которого открывается окно...

Перенести текст с одного label на label в другом окне
Как перенести текст с label одного окна в label другого окна? ссылка на гитхаб: https://github.com/tim-stark-m45/WPF_ViewTest

Как в отобразить текст в Label
https://www.cyberforum.ru/windows-forms/thread1749432.html - Корни вопроса отсюда Отдельный вопрос создал. Но я решил сделать всё...

Как сделать label() в дочернем окне?
Друзья, не могу разобраться, как сделать label() в дочернем окне. Нашел в интернете, что нужно брать рут класса дочернего окна, однако я не...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru