2014 dxdy logo

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

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




 
 Не подключаются модули PyQt5
Сообщение15.02.2020, 17:49 
Здравствуйте. Проблема в следующем. Есть два 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 
optimden в сообщении #1439921 писал(а):
При этом в ходе исполнения второго кода VSCode пишет
Не совсем ясно, какие из сообщений выдают линтеры (это как раз до исполнения должно быть, при изменениях кода и сохранении), а какие — Python (они обычно будут не среди сообщений, а в консоли).

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

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

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

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

 
 
 
 Re: Не подключаются модули PyQt5
Сообщение15.02.2020, 21:09 
arseniiv в сообщении #1439936 писал(а):
А в точности? И лучше со ссылкой на строку в исходнике, а в исходнике пометьте где она, может будет яснее.

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

 
 
 
 Re: Не подключаются модули PyQt5
Сообщение15.02.2020, 21:34 
Ура! Даже советовать ничего не пришлось. :-)

 
 
 [ Сообщений: 4 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group