Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PyQt: не появляются строки в QListWidget... / 14 сообщений из 14, страница 1 из 1
04.02.2019, 17:33
    #39769340
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PyQt: не появляются строки в QListWidget...
В 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
05.02.2019, 09:15
    #39769492
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PyQt: не появляются строки в QListWidget...
Интерфейс оживляю такой конструкцией:
Код: python
1.
2.
q_app = QtWidgets.QApplication.instance()
q_app.processEvents();



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



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



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

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

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

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

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

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



Как кошерно оживлять форму? Неужели надо второй процесс забацать?
...
Рейтинг: 0 / 0
05.02.2019, 11:05
    #39769549
Лысый дядька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PyQt: не появляются строки в QListWidget...
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
05.02.2019, 11:09
    #39769553
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PyQt: не появляются строки в QListWidget...
Лысый дядька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
05.02.2019, 11:18
    #39769560
Лысый дядька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PyQt: не появляются строки в QListWidget...
AlekseySQLНет, не сможете

А что именно вам мешает сделать минимальный рабочий пример, который отражает суть вашей проблемы, чтобы тот человек, который захочет вам помочь, хотя смог увидеть в дебаггере сущности, про которые идет речь? Да даже не в дебаггере, а просто увидеть форму глазами? В вашей программе нет даже кода, который создает инстанс класса, надо как-то догадываться, чего вы там кодите вообще? Алексей, это же крайне просто: есть проблема, которая очень просто локализуется - вот, дескать, есть форма с одним списком, и я в этот список программно добавляю строки, а они не добавляются. Ну так и дайте народу форму с одним списком и самодостаточный код, чтобы каждый мог это воспроизвести.
...
Рейтинг: 0 / 0
05.02.2019, 13:14
    #39769624
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PyQt: не появляются строки в 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.
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
05.02.2019, 13:25
    #39769634
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PyQt: не появляются строки в QListWidget...
Причем это не проблема 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
05.02.2019, 15:25
    #39769702
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PyQt: не появляются строки в QListWidget...
Решил уйти от 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
05.02.2019, 17:16
    #39769773
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PyQt: не появляются строки в 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.
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
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PyQt: не появляются строки в QListWidget... / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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