2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Не подключаются модули PyQt5
Сообщение15.02.2020, 17:49 


21/02/19
108
Здравствуйте. Проблема в следующем. Есть два PyQt5 кода: первый - пример создания простейшего окна, второй - моя собственная его модификация. Первый код работает, второй - нет, пишет, что имя подкласса (MyWindow), для которого я создаю объект (ex), не определено. При этом в ходе исполнения второго кода VSCode пишет: "no name 'QApplication' in module 'PyQt5.QtWidgets'". И так далее для всех импортированных модулей.
Оба файла лежат в одной и той же папке. Можете подсказать, в чём может быть дело?
Исполняемые коды приведены ниже:
Первая программа:
код: [ скачать ] [ спрятать ]
Используется синтаксис Python
#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QToolTip, QPushButton, QVBoxLayout
from PyQt5.QtGui import QIcon, QFont


class Diary(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):

        QToolTip.setFont(QFont('SansSerif', 10))

        self.setToolTip('This is a <b>QWidget</b> widget')

        btn = QPushButton('Button', self)
        btn.setToolTip('This is a <b>QPushButton</b> widget')
        btn.resize(btn.sizeHint())
        btn.move(50, 50)

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Tooltips')
        self.setWindowIcon(QIcon('web.png'))
        self.show()


if __name__ == '__main__':

    app = QApplication(sys.argv)
    diary = Diary()
    sys.exit(app.exec_())
 


Вторая программа:
код: [ скачать ] [ спрятать ]
Используется синтаксис Python
#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
from PyQt5.QtGui import QIcon, QFont
from PyQt5.QtCore import Qt

class MyWindow(QWidget):

    def __init__(self):
        super().__init__()

        self.initUi()
   
    def initUi(self):
        self.vbox = QVBoxLayout()
        self.label1 = QLabel("Вход:")
        self.label1.setAlignment(Qt.AlignHCenter)
        self.label2 = QLabel("Имя:")
        self.label2.setAlignment(Qt.AlignHCenter)
        self.label3 = QLabel("Пароль:")
        self.label3.setAlignment(Qt.AlignHCenter)
        self.text1 = QLineEdit()
        self.text2 = QLineEdit()
        self.btnOk = QPushButton("Подтвердить")
        self.vbox.addWidget(self.label1)
        self.vbox.addWidget(self.label2)
        self.vbox.addWidget(self.text1)
        self.vbox.addWidget(self.label3)
        self.vbox.addWidget(self.text2)
        self.vbox.addWidget(self.btnOk)
        self.setLayout(self.vbox)

    if __name__ == "__main__":
        app = QApplication(sys.argv)
        ex = MyWindow()
        ex.setWindowTitle("Дневник")
        ex.resize(500, 300)
        ex.show()
        sys.exit(app.exec_())
 


P.S.
После редактирования файла settings.json в VSCode, как советуют в интернете, ошибки с ненахождением импортированных модулей ушли, но также пишет, что имя MyWindow не определено, хотя вроде подкласс определён выше.
В settings.json добавил следующее:
Используется синтаксис Python
"python.linting.pylintArgs": [
        "--extension-pkg-whitelist=PyQt5"
    ]

 Профиль  
                  
 
 Re: Не подключаются модули PyQt5
Сообщение15.02.2020, 20:24 
Заслуженный участник


27/04/09
28128
optimden в сообщении #1439921 писал(а):
При этом в ходе исполнения второго кода VSCode пишет
Не совсем ясно, какие из сообщений выдают линтеры (это как раз до исполнения должно быть, при изменениях кода и сохранении), а какие — Python (они обычно будут не среди сообщений, а в консоли).

Цитата:
Первый код работает, второй - нет, пишет, что имя подкласса (MyWindow), для которого я создаю объект (ex), не определено.
А в точности? И лучше со ссылкой на строку в исходнике, а в исходнике пометьте где она, может будет яснее.

А какие у вас ещё другие файлы в том же проекте? Случайно там нигде не нужно что-то указать для второго модуля, что для первого могло быть уже сделано, потому что это пример (я пока не работал с Qt на питоне, не имею понятия)?

Ещё возможно если будет время, попробуйте минимизировать каждый пример (и первый оставить рабочим, а второй нерабочим).

Кстати не по теме, но исполняемый код — это обычно что-то нечитаемое, в данном случае это файлы .pyc, в которые питон компилирует исходники перед исполнением, а потом уже интерпретирует их. :-)

 Профиль  
                  
 
 Re: Не подключаются модули PyQt5
Сообщение15.02.2020, 21:09 


21/02/19
108
arseniiv в сообщении #1439936 писал(а):
А в точности? И лучше со ссылкой на строку в исходнике, а в исходнике пометьте где она, может будет яснее.

Всё, нашёл ошибку. Упрощение кода действительно позволило проще её заметить. Условие, в котором создаётся объект приложения, принадлежало классу (были ненужные отступы). Видимо не привык ещё к тому, что форматирование кода в пайтоне важнее некуда.
Спасибо за помощь)

 Профиль  
                  
 
 Re: Не подключаются модули PyQt5
Сообщение15.02.2020, 21:34 
Заслуженный участник


27/04/09
28128
Ура! Даже советовать ничего не пришлось. :-)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group