[Python3.x][PyQT5]Skróty klawiszowe i ikonka programu

0

Witam forumowicze,

Moje początki z Pythonem są lekko burzliwe i nie mogę dojść do ładu i składu.
1. W python 3.7.4 Shell ikonka programu pojawia się, a w Visual studio code nie dlaczego? Nie wiedzieć czemu w VS wszystkie from mam podkreślone na czerwono mimo iż zainstalowałem i uruchamiam program, nawet podpowiedzi działają.
2. Chce skorzystać ze skrótów klawiszowych , Escape i Key_CapsLock działają, pozostałe nie QtGui podkreślone na czerwono.

Z góry dziękuję za pomoc.

import serial

from PyQt5.QtWidgets import QApplication, QWidget
#from PyQt5 import QtGui 
#from PyQt5.QtGui import QIcon, QKeySequence
from PyQt5.QtGui import *
from PyQt5.QtWidgets import QLabel, QGridLayout
from PyQt5.QtWidgets import QLineEdit, QPushButton, QHBoxLayout
from PyQt5.QtWidgets import QMessageBox, QShortcut
from PyQt5.QtCore import Qt

class Kalkulator(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.interfejs()
        '''self.terminal_()

    def interfejs(self):    
        ser = serial.Serial("COM1", 115200)
        while True:
        cc=str(ser.readline().decode('ascii'))
        print(cc)'''

    def interfejs(self):

        # etykiety
        etykieta1 = QLabel("Liczba 1:", self)
        etykieta2 = QLabel("Liczba 2:", self)
        etykieta3 = QLabel("Wynik:", self)

        # przypisanie widgetów do układu tabelarycznego
        ukladT = QGridLayout()
        ukladT.addWidget(etykieta1, 0, 0)
        ukladT.addWidget(etykieta2, 0, 1)
        ukladT.addWidget(etykieta3, 0, 2)

        # 1-liniowe pola edycyjne
        self.liczba1Edt = QLineEdit()
        self.liczba2Edt = QLineEdit()
        self.wynikEdt = QLineEdit()

        self.wynikEdt.readonly = True
        self.wynikEdt.setToolTip('Wpisz <b>liczby</b> i wybierz działanie...')

        ukladT.addWidget(self.liczba1Edt, 1, 0)
        ukladT.addWidget(self.liczba2Edt, 1, 1)
        ukladT.addWidget(self.wynikEdt, 1, 2)

        # przyciski
        dodajBtn = QPushButton("&Dodaj", self)
        odejmijBtn = QPushButton("&Odejmij", self)
        dzielBtn = QPushButton("&Mnóż", self)
        mnozBtn = QPushButton("D&ziel", self)
        koniecBtn = QPushButton("&Koniec", self)
        koniecBtn.resize(koniecBtn.sizeHint())

        ukladH = QHBoxLayout()
        ukladH.addWidget(dodajBtn)
        ukladH.addWidget(odejmijBtn)
        ukladH.addWidget(dzielBtn)
        ukladH.addWidget(mnozBtn)

        ukladT.addLayout(ukladH, 2, 0, 1, 3)
        ukladT.addWidget(koniecBtn, 3, 0, 1, 3)

        # przypisanie utworzonego układu do okna
        self.setLayout(ukladT)
        koniecBtn.clicked.connect(self.koniec)
        dodajBtn.clicked.connect(self.dzialanie)
        odejmijBtn.clicked.connect(self.dzialanie)
        mnozBtn.clicked.connect(self.dzialanie)
        dzielBtn.clicked.connect(self.dzialanie)

        self.setGeometry(800, 400, 300, 100)
        self.setWindowIcon(QIcon('kalkulator.png'))
        self.setWindowTitle("Terminal PyQT5")
        self.show()

    def koniec(self):
        self.close()

    def closeEvent(self, event):
    
        odp = QMessageBox.question(
            self, 'Komunikat',
            "Czy na pewno koniec?",
            QMessageBox.Yes | QMessageBox.No, QMessageBox.No)

        if odp == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()


    def keyPressEvent(self, event):
        k = event.key()
        m = int(event.modifiers())
        if k == Qt.Key_Escape:
            self.koniec()
        elif k == Qt.Key_CapsLock:
            self.koniec()
        elif QtGui.QKeySequence(m+k) == QtGui.QKeySequence('Ctrl+N'):
            self.koniec()
        elif QtGui.QKeySequence(m+k) == QtGui.QKeySequence('Ctrl+P'):
            self.koniec()
        elif QtGui.QKeySequence(m+k) == QtGui.QKeySequence('Ctrl+R'):
            self.koniec()
        elif QtGui.QKeySequence(m+k) == QtGui.QKeySequence('Ctrl+Q'):
            self.koniec()
        else:
            event.ignore() 

    def dzialanie(self):

        nadawca = self.sender()
        try:
            liczba1 = float(self.liczba1Edt.text())
            liczba2 = float(self.liczba2Edt.text())
            wynik = ""

            if nadawca.text() == "&Dodaj":
                    wynik = liczba1 + liczba2
            elif nadawca.text() == "&Odejmij":
                wynik = liczba1 - liczba2
            elif nadawca.text() == "&Mnóż":
                wynik = liczba1 * liczba2
            else:  # dzielenie
                try:
                    wynik = round(liczba1 / liczba2, 9)
                except ZeroDivisionError:
                    QMessageBox.critical(
                        self, "Błąd", "Nie można dzielić przez zero!")
                    return

            self.wynikEdt.setText(str(wynik))

        except ValueError:
            QMessageBox.warning(self, "Błąd", "Błędne dane", QMessageBox.Ok)


if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)
    okno = Kalkulator()
    sys.exit(app.exec_())

0

W PyCharmie taki problem rozwiazuje sie w ten sposob, ze sie zaznacza foldery jako source, nie wiem czy w VSC jest taka opcja, ale powinienes i tak zaciagnac PyCharma.

0

W VSCode instalujesz wtyczkę Python od Microsoftu. Następnie tworzysz plik z roszerzeniem *.py i już powinno śmigać. Jeżeli nie, upewniasz się, że na dolnej belce po prawej stronie masz Python. Poza tym:

  1. Otwierasz komendy (Ctrl + Shift + P).
  2. Wpisujesz "Python: Build Workspace Symbols" i wybierasz.
  3. Gotowe.
0
Haskell napisał(a):

W VSCode instalujesz wtyczkę Python od Microsoftu. Następnie tworzysz plik z roszerzeniem *.py i już powinno śmigać. Jeżeli nie, upewniasz się, że na dolnej belce po prawej stronie masz Python. Poza tym:

  1. Otwierasz komendy (Ctrl + Shift + P).
  2. Wpisujesz "Python: Build Workspace Symbols" i wybierasz.
  3. Gotowe.

hej, dzięki, że ktoś się w końcu odezwał.
Oczywiście mam zainstalowany dodatek Python(ms-python.python)
W prawym dolnym rogu mam Python, we właściwościach jest auto detect.
Mam plik z pytonem.
Mam zainstalowaną bibliotekę pyQt5.
Masz może jakieś inne sugestie?

0

Co ciekawe program normalnie się odpala mimo iż sypie błędami chyba wszystkich bibilotek:
No name 'QApplication' in module 'PyQt5.QtWidgets'
No name 'QWidget' in module 'PyQt5.QtWidgets'
No name 'QLabel' in module 'PyQt5.QtWidgets'
No name 'QGridLayout' in module 'PyQt5.QtWidgets'
No name 'QLineEdit' in module 'PyQt5.QtWidgets'
No name 'QPushButton' in module 'PyQt5.QtWidgets'
No name 'QHBoxLayout' in module 'PyQt5.QtWidgets'
No name 'QMessageBox' in module 'PyQt5.QtWidgets'
No name 'QShortcut' in module 'PyQt5.QtWidgets'
No name 'Qt' in module 'PyQt5.QtCore'

1 użytkowników online, w tym zalogowanych: 0, gości: 1