Добавление более одного свойства в GUI, созданное с помощью Qt Designer, вызывает SystemError в PyQt5 - PullRequest
0 голосов
/ 24 марта 2020

Итак, я только что обнаружил что-то, что я считаю ошибкой, но, возможно, я сделал что-то не так, поэтому подумал, что должен опубликовать это здесь

Я спроектировал GUI, используя Qt Designer , а затем загрузил его в мой интерфейсный класс, используя loadUi(). Все это работает без проблем. Однако затем я добавил свойства в свой класс: одно свойство не вызывает проблем, но как только их становится больше, я получаю SystemError:

Traceback (most recent call last):
  File "test.py", line 23, in <module>
    GUI = MainWindow()
  File "test.py", line 9, in __init__
    loadUi('../gui/test.ui', self)
  File "..\Anaconda3\lib\site-packages\PyQt5\uic\__init__.py", line 226, in loadUi
    return DynamicUILoader(package).loadUi(uifile, baseinstance, resource_suffix)
  File "..\Anaconda3\lib\site-packages\PyQt5\uic\Loader\loader.py", line 72, in loadUi
    return self.parse(filename, resource_suffix, basedir)
  File "..\Anaconda3\lib\site-packages\PyQt5\uic\uiparser.py", line 1021, in parse
    actor(elem)
  File "..\Anaconda3\lib\site-packages\PyQt5\uic\uiparser.py", line 942, in createConnections
    QtCore.QMetaObject.connectSlotsByName(self.toplevelWidget)
SystemError: <built-in function connectSlotsByName> returned a result with an error set

пользовательский интерфейс, который Я загрузил в этом случае простой шаблон QDialog, ничего больше. Вы можете увидеть содержимое test.ui ниже:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Dialog</class>
 <widget class="QDialog" name="Dialog">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Dialog</string>
  </property>
 </widget>
 <resources/>
 <connections/>
</ui>

Вот код, который создал ошибку:

import sys
from PyQt5.QtWidgets import QDialog, QApplication
from PyQt5.uic import loadUi


class MainWindow(QDialog):
    def __init__(self):
        super().__init__()
        loadUi('../gui/test.ui', self)
        self.test = 1

    @property
    def test2(self):
        return self.test

    @property
    def test3(self):
        return self.test


if __name__ == '__main__':
    app = QApplication(sys.argv)
    GUI = MainWindow()
    GUI.show()
    sys.exit(app.exec_())

Как только вы удалите одно из свойств или loadUi() команда, снова работает. Что не так?

...