Ответы пользователя по тегу Интерфейс пользователя
  • Как добиться видимости объектов созданных в формах Qt Designer при разработке кода в PyCharm?

    @bbkmzzzz
    Заведите в классе отдельное поле для форм, будет удобнее.
    import labaa2
    
    class Laba2(QMainWindow):
        def __init__(self):
            super().__init__()
            self.ui = self.setupUi(self)


    Тогда вся форма будет в ui
    self.ui.button # например

    Дело в том, что QtDesigner создает файлы в "своем формате" (xml, если правильно помню), попробуйте открыть ui файл блокнотом, увидите. Питон ни сном ни духом, что там такое находится и как с этим взаимодействовать, вот тут на сцену и выходит uic. Он преобразует дерево виджетов ui в валидный питоновский класс, который использует установленную питоновскую библиотеку-обертку над Qt.
    С uic 2 подхода:
    1. uic.loadUi('TEST.ui', self)
    (есть смысл запихнуть это в отдельное поле класса, например, self.ui = uic.loadUi('TEST.ui', self), дабы не возникло не нужных пересечений имен, да и, на мой взгляд, аккуратнее получиться, мало ли еще одну форму в этот же класс грузить будете.)
    uic парсит ui файл, и создает сущности. Каждый раз, при запуске программы это будет происходить.
    + Не требует промежуточных звеньев
    - Не работает автодополнение IDE
    - Парсинг и формирование питон класса при каждом запуске.
    2. Конвертация заранее.
    - Требует промежуточное действие между формой и программой. (преобразование в ui в py)
    + Работает автодополнение
    + Не тратится время на преобразование при запуске программы.
    + В PyCharm можно настроить конвертацию на горячую клавишу.

    Не надо наследовать класс сразу от двух классов, в 99.9% Вам это не надо, а странных для вас эффектов можете огрести.
    С использованием предварительной конвертации
    Импортируйте сконвертированную форму в самом начале, дайте ей понятное название, потом подключите
    import labaa2
    from labaa2.Ui_Laba2 import Ui_что_там_у_вас as MainForm_UI
    
    class Laba2(QMainWindow,):
        def __init__(self):
            super().__init__()
            self.ui = MainFormUI()
            self.ui.setupUi(self)

    теперь вся форма будет в ui, автодополнение работает, Pycharm скорее всего не увидит сигналов, но это нормально, работать они, естественно, будут.

    P.S. Pycharm и External tools
    Картинки

    5f8caa995f6ff805437661.png
    5f8cad28bb2ce085833759.png
    Для такой организации формочек
    5f8cadf60e0e2969686885.png
    Правой кнопкой по файлу - то, как Вы назовете external tool.
    5f8caefc48637441580438.png
    # импорт
    import labaa2
    from forms.py.temp_ui import Ui_MainWindow as MainForm
    
    
    class Laba2(QMainWindow,):
        def __init__(self):
            super().__init__()
            self.ui = MainForm()
            self.ui.setupUi(self)


    Добавление хоткея
    5f8cafbe07d7f009801572.png
    Ответ написан
    1 комментарий
  • PyQt записать в lineEdit по нажатию кнопки?

    @bbkmzzzz
    Можно так:
    self.ui.btnQuit.clicked.connect(lambda: self.ui.lineEdit.setText("Text"))  # Пример №2

    или привязать к методу
    # -*- coding: utf-8 -*-
    
    from PyQt5 import QtWidgets, uic
    import sys
    
    class MyWindow(QtWidgets.QWidget):
        def __init__(self, parent = None):
            QtWidgets.QWidget.__init__(self, parent)
            Form, Base = uic.loadUiType("window.ui")
            self.ui = Form()
            self.ui.setupUi(self)
            self.ui.lineEdit.setText("Text")  # Пример №1
    
            self.ui.btnQuit.clicked.connect(self.setmytext))  # Пример №2 Внимательно со скобками, нам нужно
                                                                                       #передать метод, но не результат его выполнения!
    
        def setmytext(self):
            self.ui.lineEdit.setText("Text")
    
    if __name__ == "__main__":
        import sys
        app = QtWidgets.QApplication(sys.argv)
        window = MyWindow()
        window.show()
        sys.exit(app.exec_())
    Ответ написан
    Комментировать