Разместить текст в нужный QLineEdit по нажатию на кнопку "1"
Как в методе one() сделать:
- если перед нажатием на кнопку
1фокус был наlineedit, то писать1вlineedit, - если фокус был на
lineedit2и после этого нажатием на кнопку1, то писать1вlineedit2?
from PyQt5 import QtCore , QtWidgets
from PyQt5.QtGui import QIcon
class MyWindow(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Калькулятор")
self.resize(450, 200)
self.setWindowIcon(QIcon("calculator.png"))
self.grid = QtWidgets.QGridLayout()
self.setLayout(self.grid)
self.label = QtWidgets.QLabel("Ответ:")
self.btn1 = QtWidgets.QPushButton("-")
self.btn2 = QtWidgets.QPushButton("+")
self.btn3 = QtWidgets.QPushButton("/")
self.btn4 = QtWidgets.QPushButton("*")
self.btn5 = QtWidgets.QPushButton("1")
self.btn6 = QtWidgets.QPushButton("2")
self.btn7 = QtWidgets.QPushButton("3")
self.btn8 = QtWidgets.QPushButton("4")
self.btn9 = QtWidgets.QPushButton("5")
self.btn10 = QtWidgets.QPushButton("6")
self.btn11 = QtWidgets.QPushButton("7")
self.btn12 = QtWidgets.QPushButton("8")
self.btn13 = QtWidgets.QPushButton("9")
self.btn14 = QtWidgets.QPushButton("0")
self.btn16 = QtWidgets.QPushButton("C")
self.btn15 = QtWidgets.QPushButton("**")
self.lineedit = QtWidgets.QLineEdit()
self.lineedit2 = QtWidgets.QLineEdit()
self.grid.addWidget(self.label, 9, 1)
self.grid.addWidget(self.lineedit, 0, 0)
self.grid.addWidget(self.lineedit2, 0 ,1)
self.grid.addWidget(self.btn1, 1, 0)
self.grid.addWidget(self.btn2 , 1 , 1)
self.grid.addWidget(self.btn3 , 2, 0)
self.grid.addWidget(self.btn4 , 2, 1)
self.grid.addWidget(self.btn15 , 3 , 0)
self.grid.addWidget(self.btn16 ,3 , 1)
self.grid.addWidget(self.btn5 ,4 , 0)
self.grid.addWidget(self.btn6 , 4 ,1)
self.grid.addWidget(self.btn7 , 5 ,0)
self.grid.addWidget(self.btn8 , 5 ,1)
self.grid.addWidget(self.btn9 , 6 ,0)
self.grid.addWidget(self.btn10, 6 ,1)
self.grid.addWidget(self.btn11 , 7 ,0)
self.grid.addWidget(self.btn12, 7 ,1)
self.grid.addWidget(self.btn13, 8 ,0)
self.grid.addWidget(self.btn14, 8, 1)
self.btn1.clicked.connect(self.minus)
self.btn2.clicked.connect(self.plus)
self.btn3.clicked.connect(self.delen)
self.btn4.clicked.connect(self.umn)
self.btn5.clicked.connect(self.one)
self.btn6.clicked.connect(self.two)
self.btn7.clicked.connect(self.three)
self.btn8.clicked.connect(self.four)
self.btn9.clicked.connect(self.five)
self.btn10.clicked.connect(self.six)
self.btn11.clicked.connect(self.seven)
self.btn12.clicked.connect(self.eight)
self.btn13.clicked.connect(self.nine)
self.btn14.clicked.connect(self.zero)
self.btn16.clicked.connect(self.clear)
self.btn15.clicked.connect(self.qwe)
self.btn1.setShortcut("Ctrl+1")
self.btn2.setShortcut("Ctrl+2")
self.btn3.setShortcut("Ctrl+3")
self.btn4.setShortcut("Ctrl+4")
self.btn16.setShortcut("Ctrl+5")
self.btn15.setShortcut("Ctrl+6")
def qwe(self):
result = int(self.lineedit.text()) ** int(self.lineedit2.text())
self.label.setText(f"Ответ: {result}")
def minus(self):
result = int(self.lineedit.text()) - int(self.lineedit2.text())
self.label.setText(f"Ответ: {result}")
def plus(self):
result = int(self.lineedit.text()) + int(self.lineedit2.text())
self.label.setText(f"Ответ: {result}")
def delen(self):
result = int(self.lineedit.text()) / int(self.lineedit2.text())
self.label.setText(f"Ответ: {result}")
def umn(self):
result = int(self.lineedit.text()) * int(self.lineedit2.text())
self.label.setText(f"Ответ: {result}")
def clear(self):
self.lineedit.clear()
self.lineedit2.clear()
def one(self):
if self.lineedit.setFocus():
self.lineedit.insert("1")
if self.lineedit2.setFocus():
self.lineedit2.insert("1")
def two(self):
#self.lineedit.setText("2")
#self.lineedit2.setText("2")
print(2)
def three(self):
#self.lineedit.setText("3")
#self.lineedit2.setText("3")
print(3)
def four(self):
#self.lineedit.setText("4")
#self.lineedit2.setText("4")
print(4)
def five(self):
#self.lineedit.setText("5")
#self.lineedit2.setText("5")
print(5)
def six(self):
#self.lineedit.setText("6")
#self.lineedit2.setText("6")
print(6)
def seven(self):
#self.lineedit.setText("7")
#self.lineedit2.setText("7")
print(7)
def eight(self):
#self.lineedit.setText("8")
#self.lineedit2.setText("8")
print(8)
def nine(self):
#self.lineedit.setText("9")
#self.lineedit2.setText("9")
print(9)
def zero(self):
#self.lineedit.setText("0")
#self.lineedit2.setText("0")
print(0)
def changeEvent(self, e):
if e.type() == QtCore.QEvent.WindowStateChange:
if self.isMinimized():
print("Окно свернуто")
elif self.isMaximized():
print("Окно развернуто")
elif self.isActiveWindow():
print("Окно в фокусе")
return QtWidgets.QWidget.changeEvent(self, e)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
void QApplication::focusChanged(QWidget *old, QWidget *now)
Этот сигнал испускается, когда виджет, который имеет фокус клавиатуры, изменился со old на now, т.е. когда пользователь нажал клавишу табуляции, щелкнул виджет или изменил активное окно.
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtGui import QIcon
class MyWindow(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Калькулятор")
self.resize(450, 200)
self.setWindowIcon(QIcon("calculator.png"))
self.grid = QtWidgets.QGridLayout()
self.setLayout(self.grid)
self.label = QtWidgets.QLabel("Ответ:")
self.btn1 = QtWidgets.QPushButton("-")
self.btn2 = QtWidgets.QPushButton("+")
self.btn3 = QtWidgets.QPushButton("/")
self.btn4 = QtWidgets.QPushButton("*")
self.btn5 = QtWidgets.QPushButton("1")
self.btn6 = QtWidgets.QPushButton("2")
self.btn7 = QtWidgets.QPushButton("3")
self.btn8 = QtWidgets.QPushButton("4")
self.btn9 = QtWidgets.QPushButton("5")
self.btn10 = QtWidgets.QPushButton("6")
self.btn11 = QtWidgets.QPushButton("7")
self.btn12 = QtWidgets.QPushButton("8")
self.btn13 = QtWidgets.QPushButton("9")
self.btn14 = QtWidgets.QPushButton("0")
self.btn16 = QtWidgets.QPushButton("C")
self.btn15 = QtWidgets.QPushButton("**")
# !!!
self.lineedit = QtWidgets.QLineEdit()
self.lineedit.setObjectName('lineedit') # +++
self.lineedit2 = QtWidgets.QLineEdit()
self.lineedit2.setObjectName('lineedit2') # +++
self.grid.addWidget(self.label, 9, 1)
self.grid.addWidget(self.lineedit, 0, 0)
self.grid.addWidget(self.lineedit2, 0 ,1)
self.grid.addWidget(self.btn1, 1, 0)
self.grid.addWidget(self.btn2 , 1 , 1)
self.grid.addWidget(self.btn3 , 2, 0)
self.grid.addWidget(self.btn4 , 2, 1)
self.grid.addWidget(self.btn15 , 3 , 0)
self.grid.addWidget(self.btn16 ,3 , 1)
self.grid.addWidget(self.btn5 ,4 , 0)
self.grid.addWidget(self.btn6 , 4 ,1)
self.grid.addWidget(self.btn7 , 5 ,0)
self.grid.addWidget(self.btn8 , 5 ,1)
self.grid.addWidget(self.btn9 , 6 ,0)
self.grid.addWidget(self.btn10, 6 ,1)
self.grid.addWidget(self.btn11 , 7 ,0)
self.grid.addWidget(self.btn12, 7 ,1)
self.grid.addWidget(self.btn13, 8 ,0)
self.grid.addWidget(self.btn14, 8, 1)
self.btn1.clicked.connect(self.minus)
self.btn2.clicked.connect(self.plus)
self.btn3.clicked.connect(self.delen)
self.btn4.clicked.connect(self.umn)
self.btn5.clicked.connect(self.one)
self.btn6.clicked.connect(self.two)
self.btn7.clicked.connect(self.three)
self.btn8.clicked.connect(self.four)
self.btn9.clicked.connect(self.five)
self.btn10.clicked.connect(self.six)
self.btn11.clicked.connect(self.seven)
self.btn12.clicked.connect(self.eight)
self.btn13.clicked.connect(self.nine)
self.btn14.clicked.connect(self.zero)
self.btn16.clicked.connect(self.clear)
self.btn15.clicked.connect(self.qwe)
self.btn1.setShortcut("Ctrl+1")
self.btn2.setShortcut("Ctrl+2")
self.btn3.setShortcut("Ctrl+3")
self.btn4.setShortcut("Ctrl+4")
self.btn16.setShortcut("Ctrl+5")
self.btn15.setShortcut("Ctrl+6")
# !!!
self.lineEditFocused = None # +++
QtCore.QTimer.singleShot(700, self._focusChanged) # +++
# !!!
def _focusChanged(self): # +++
app.focusChanged.connect(self.on_focusChaned) # +++
def qwe(self):
result = int(self.lineedit.text()) ** int(self.lineedit2.text())
self.label.setText(f"Ответ: {result}")
def minus(self):
result = int(self.lineedit.text()) - int(self.lineedit2.text())
self.label.setText(f"Ответ: {result}")
def plus(self):
result = int(self.lineedit.text()) + int(self.lineedit2.text())
self.label.setText(f"Ответ: {result}")
def delen(self):
result = int(self.lineedit.text()) / int(self.lineedit2.text())
self.label.setText(f"Ответ: {result}")
def umn(self):
result = int(self.lineedit.text()) * int(self.lineedit2.text())
self.label.setText(f"Ответ: {result}")
def clear(self):
self.lineedit.clear()
self.lineedit2.clear()
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
def on_focusChaned(self, widget):
self.lineEditFocused = widget # <-- Это будет объект QLineEdit
def one(self):
#print(f'one(self): {self.lineEditFocused}')
if self.lineEditFocused.objectName() in ['lineedit', 'lineedit2']: # +++
self.lineEditFocused.setText('1') # +++
'''
if self.lineedit.setFocus():
self.lineedit.insert("1")
if self.lineedit2.setFocus():
self.lineedit2.insert("1")
'''
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
def two(self):
#self.lineedit.setText("2")
#self.lineedit2.setText("2")
print(2)
def three(self):
#self.lineedit.setText("3")
#self.lineedit2.setText("3")
print(3)
def four(self):
#self.lineedit.setText("4")
#self.lineedit2.setText("4")
print(4)
def five(self):
#self.lineedit.setText("5")
#self.lineedit2.setText("5")
print(5)
def six(self):
#self.lineedit.setText("6")
#self.lineedit2.setText("6")
print(6)
def seven(self):
#self.lineedit.setText("7")
#self.lineedit2.setText("7")
print(7)
def eight(self):
#self.lineedit.setText("8")
#self.lineedit2.setText("8")
print(8)
def nine(self):
#self.lineedit.setText("9")
#self.lineedit2.setText("9")
print(9)
def zero(self):
#self.lineedit.setText("0")
#self.lineedit2.setText("0")
print(0)
def changeEvent(self, e):
if e.type() == QtCore.QEvent.WindowStateChange:
if self.isMinimized():
print("Окно свернуто")
elif self.isMaximized():
print("Окно развернуто")
elif self.isActiveWindow():
print("Окно в фокусе")
return QtWidgets.QWidget.changeEvent(self, e)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
