Разместить текст в нужный QLineEdit по нажатию на кнопку "1"

Рейтинг: 0Ответов: 1Опубликовано: 28.03.2023

Как в методе 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_())

Ответы

▲ 0

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

введите сюда описание изображения