powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PyQt: не появляются строки в QListWidget...
14 сообщений из 14, страница 1 из 1
PyQt: не появляются строки в QListWidget...
    #39769340
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В Qt Designer я создал форму, на которую поместил QlistWidget для отображения хода обработки:

Код: 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.
from PyQt5 import QtWidgets, uic
from Database import Manager
from MyLib import Events, GUI
import Forms, General
 
class Form(QtWidgets.QWidget):
 
    def __init__(self, parent: QtWidgets.QMainWindow):
        QtWidgets.QWidget.__init__(self)
         
        ClassForm, _ = uic.loadUiType(Forms.Directory + 'CreateDatabase.ui')    
        self.ui = ClassForm()
        self.ui.setupUi(self)
        self.parent = parent
         
        #name of form
        self.setWindowTitle('Form for creating database')
        self.widget = QtWidgets.QWidget(self)
          
        layoutV = QtWidgets.QVBoxLayout()
        layoutV.addWidget(self.ui.label)
        layoutV.addWidget(self.ui.ButtonCreateDatabase)
        layoutV.addWidget(self.ui.MessageList)
         
        self.widget.setLayout(layoutV)
        self.setLayout(layoutV)
            
        self.ui.ButtonCreateDatabase.clicked.connect(self.CreateDatabase)
   
    ...
         
    def event(self, current_event: Events.EventForMessageList) -> bool:
        if current_event.type() !=  General.type_event:
            return False
          
        current_object = self.ui.MessageList
        current_object.addItem(current_event.message)
        return True



Форма отлично создается, во время хода выполнения ей прибывают события нужного типа с непустыми значениями в поле message , они без ошибок обрабатываются, но в QListWidget новых строк не появляется. Это поле всегда остается полностью пустым.

Почему?
...
Рейтинг: 0 / 0
PyQt: не появляются строки в QListWidget...
    #39769492
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интерфейс оживляю такой конструкцией:
Код: python
1.
2.
q_app = QtWidgets.QApplication.instance()
q_app.processEvents();



Причем обработка закончена и интерфейс должен отрисоваться без дополнительных действий, но поле списка остается пустым.
...
Рейтинг: 0 / 0
PyQt: не появляются строки в QListWidget...
    #39769504
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Самое прикольное, что количество невидимых элементов в списке растет! Этот код возвращает постоянно увеличивающееся значение:
Код: python
1.
quantity = self.ui.MessageList.count()



Что за магия?
...
Рейтинг: 0 / 0
PyQt: не появляются строки в QListWidget...
    #39769528
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
причем список реально хранит значения, потому что конструкции типа:
Код: python
1.
2.
self.ui.MessageList.item(quantity-1).text()
self.ui.MessageList.item(quantity-2).text()



возвращают корректные значения! То есть данные в списке содержаться, но почему- то не отображаются (хотя повторюсь, интерфейс "живой").
...
Рейтинг: 0 / 0
PyQt: не появляются строки в QListWidget...
    #39769539
Лысый дядька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL,

Алексей, вот как вы считаете, вы дали достаточно информации, чтобы кто-то, кто хотел бы вам помочь, мог бы воспроизвести вашу программу на своей машине?
...
Рейтинг: 0 / 0
PyQt: не появляются строки в QListWidget...
    #39769545
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лысый дядькаAlekseySQL,

Алексей, вот как вы считаете, вы дали достаточно информации, чтобы кто-то, кто хотел бы вам помочь, мог бы воспроизвести вашу программу на своей машине?

Kubuntu 18.10 x64, Python 3.7.2, PyQt 5.11.3
PyQt- кроссплатформенный фреймворк (т.е. не зависит от платформы) с очень редким обновлением (т.е. практически у всех всегда стоит самая последняя версия).
...
Рейтинг: 0 / 0
PyQt: не появляются строки в QListWidget...
    #39769546
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел!

Оказывается надо форму немного изменить в размерах и элементы начинают отображаться :) Ведь после добавления элемента в список я оживляю форму с помощью:

Код: python
1.
2.
q_app = QtWidgets.QApplication.instance()
q_app.processEvents();



Как кошерно оживлять форму? Неужели надо второй процесс забацать?
...
Рейтинг: 0 / 0
PyQt: не появляются строки в QListWidget...
    #39769549
Лысый дядька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLKubuntu 18.10 x64, Python 3.7.2, PyQt 5.11.3
PyQt- кроссплатформенный фреймворк (т.е. не зависит от платформы) с очень редким обновлением (т.е. практически у всех всегда стоит самая последняя версия).

Я спрошу еще раз. Может быть я как-то непонятно спрашиваю? Вот, Алексей, если я скопирую ваш код, который вы выложили в стартовом посте, и сохраню его в файл с именем test_aleksey_super_code.py, и запущу его в консоли
mycomp:~$ python test_aleksey_super_code.py
я смогу увидеть суть вашей проблемы?
...
Рейтинг: 0 / 0
PyQt: не появляются строки в QListWidget...
    #39769553
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лысый дядькаAlekseySQLKubuntu 18.10 x64, Python 3.7.2, PyQt 5.11.3
PyQt- кроссплатформенный фреймворк (т.е. не зависит от платформы) с очень редким обновлением (т.е. практически у всех всегда стоит самая последняя версия).

Я спрошу еще раз. Может быть я как-то непонятно спрашиваю? Вот, Алексей, если я скопирую ваш код, который вы выложили в стартовом посте, и сохраню его в файл с именем test_aleksey_super_code.py, и запущу его в консоли
mycomp:~$ python test_aleksey_super_code.py
я смогу увидеть суть вашей проблемы?

Нет, не сможете, потому что я спрашиваю об ошибке в работе интерфейса и не предоставляю бизнес- логику приложения, чтобы сфокусировать внимание на ошибке.
...
Рейтинг: 0 / 0
PyQt: не появляются строки в QListWidget...
    #39769560
Лысый дядька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLНет, не сможете

А что именно вам мешает сделать минимальный рабочий пример, который отражает суть вашей проблемы, чтобы тот человек, который захочет вам помочь, хотя смог увидеть в дебаггере сущности, про которые идет речь? Да даже не в дебаггере, а просто увидеть форму глазами? В вашей программе нет даже кода, который создает инстанс класса, надо как-то догадываться, чего вы там кодите вообще? Алексей, это же крайне просто: есть проблема, которая очень просто локализуется - вот, дескать, есть форма с одним списком, и я в этот список программно добавляю строки, а они не добавляются. Ну так и дайте народу форму с одним списком и самодостаточный код, чтобы каждый мог это воспроизвести.
...
Рейтинг: 0 / 0
PyQt: не появляются строки в QListWidget...
    #39769624
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поместил рабочую процедуру в отдельный поток, но ситуация не поменялась!

Код: 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.
from PyQt5 import QtWidgets, uic
import Forms, General
import threading, time

class Form(QtWidgets.QWidget):

    def __init__(self, parent: QtWidgets.QMainWindow):
        QtWidgets.QWidget.__init__(self)
        
        ClassForm, _ = uic.loadUiType(Forms.Directory + 'CreateDatabase.ui')    
        self.ui = ClassForm()
        self.ui.setupUi(self)
        self.parent = parent
        
        #name of form
        self.setWindowTitle('Form for creating database')
        self.widget = QtWidgets.QWidget(self)
         
        layoutV = QtWidgets.QVBoxLayout()
        layoutV.addWidget(self.ui.label)
        layoutV.addWidget(self.ui.ButtonCreateDatabase)
        layoutV.addWidget(self.ui.MessageList)
        
        self.widget.setLayout(layoutV)
        self.setLayout(layoutV)
           
        self.ui.ButtonCreateDatabase.clicked.connect(self.CreateDatabase)

    def do(self):
        for i in range(10):
            Events.message_error(str(i) + " Hop, hey! La- la- ley!")
            time.sleep(1)
        
    def CreateDatabase(self) -> None:
        threading.Thread(target=self.do).start()

   def event(self, current_event: Events.EventForMessageList) -> bool:
        if current_event.type() !=  General.type_event:
            return False
         
        self.ui.MessageList.addItem(current_event.message)
        return True



События продолжают прилетать, но на форме отображаются только если параллельно менять ее размер.
...
Рейтинг: 0 / 0
PyQt: не появляются строки в QListWidget...
    #39769634
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Причем это не проблема QListWidget: попробовал тот же текст устанавливать кнопке, и теперь процедура получения события выглядит так:
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
def event(self, current_event: Events.EventForMessageList) -> bool:
        if current_event.type() !=  General.type_event:
            return False
         
        self.ui.MessageList.addItem(current_event.message)
        self.ui.ButtonCreateDatabase.setText(current_event.message)
        
        return True



Та же проблема! Кнопка начинает менять текст только если я параллельно с выполнением обработки изменяю размеры формы...
...
Рейтинг: 0 / 0
PyQt: не появляются строки в QListWidget...
    #39769702
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил уйти от QtDesigner и форму создал чисто с помощью кода:

Код: 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.
class Form(QtWidgets.QWidget):
    def __init__(self, parent):
        QtWidgets.QWidget.__init__(self)
         
        #name of form
        self.setWindowTitle('Form for creating database')
        
        self.label = QtWidgets.QLabel('Обработка создания базы данных')
        self.ButtonCreateDatabase = QtWidgets.QPushButton("Создать")
        self.MessageList = QtWidgets.QListWidget()
          
        self.layoutV = QtWidgets.QVBoxLayout()
        self.layoutV.addWidget(self.label)
        self.layoutV.addWidget(self.ButtonCreateDatabase)
        self.layoutV.addWidget(self.MessageList)
         
        self.setLayout(self.layoutV)
            
        self.ButtonCreateDatabase.clicked.connect(self.CreateDatabase)
   
    def do(self):
        for i in range(10):
            Events.message_error(str(i) + " Hop, Hey! La-la-ley!")
             
            q_app = QtWidgets.QApplication.instance()
            q_app.processEvents();
     
            time.sleep(1)
         
    def CreateDatabase(self) -> None:
        threading.Thread(target=self.do).start()
         
    def event(self, current_event: Events.EventForMessageList) -> bool:
        if current_event.type() !=  General.type_event:
            return False
          
        self.MessageList.addItem(current_event.message)
        self.ButtonCreateDatabase.setText(current_event.message)
         
        q_app = QtWidgets.QApplication.instance()
        q_app.processEvents();
         
        return True



Результат точно такой же как и раньше: список и кнопка не обновляются пока я не начинаю менять размеры окна....
...
Рейтинг: 0 / 0
PyQt: не появляются строки в QListWidget...
    #39769773
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для будущих поколений оставлю итоговое решение:

Код: 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.
class MyThread(QtCore.QThread):
    def __init__(self, parent=None):
        QtCore.QThread.__init__(self, parent)
        
    def run(self):
        for i in range(1, 11):
            self.sleep(1)
            
            # Передача данных из потока через событие
            Events.message_error(str(i) + " Hop, Hey! La-la-ley!")

class MyList(QtWidgets.QListWidget):
    def __init__(self, parent=None):
        QtWidgets.QListWidget.__init__(self, parent)

    def customEvent(self, current_event: Events.EventForMessageList):
        if current_event.type() != General.type_event:
            return False
        
        self.addItem(current_event.message)
                            
class Form(QtWidgets.QWidget):
    def __init__(self, parent):
        QtWidgets.QWidget.__init__(self)
         
        #name of form
        self.setWindowTitle('Form for creating database')
        
        self.label = QtWidgets.QLabel('Обработка создания базы данных')
        self.ButtonCreateDatabase = QtWidgets.QPushButton("Создать")
        self.MessageList = MyList()
          
        self.layoutV = QtWidgets.QVBoxLayout()
        self.layoutV.addWidget(self.label)
        self.layoutV.addWidget(self.ButtonCreateDatabase)
        self.layoutV.addWidget(self.MessageList)
          
        self.setLayout(self.layoutV)
            
        self.thread = MyThread()
        
        self.ButtonCreateDatabase.clicked.connect(self.on_clicked)

    def on_clicked(self):
        General.generate_type_event()
        General.event_receiver = self.MessageList
        
        self.thread.start()
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PyQt: не появляются строки в QListWidget...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]