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_())