Проблема с передачей данных в функцию (PySide2, PyQT5)
Хотел не расписывать много и передавать код из кнопки в аргументы, но при нажатии на кнопку (pushButton) ничего не происходит.
По любому всё легко решается, но я что-то не додумал.
Подскажите, как надо изменить код, чтоб в math и realmath записывались числа кнопок, на которые нажимаешь.
math = ""
realmath = ""
def null(x):
global math, realmath
realmath += str(x)
math += str(x)
print(realmath)
def slot():
pass
ui.pushButton.clicked.connect(null(0))
ui.pushButton_7.clicked.connect(slot) #1
ui.pushButton_8.clicked.connect(slot) #2
ui.pushButton_5.clicked.connect(slot) #3
ui.pushButton_11.clicked.connect(slot) #4
ui.pushButton_12.clicked.connect(slot) #5
ui.pushButton_9.clicked.connect(slot) #6
ui.pushButton_15.clicked.connect(slot) #7
ui.pushButton_16.clicked.connect(slot) #8
ui.pushButton_13.clicked.connect(slot) #9
ui.pushButton_2.clicked.connect(slot) # .
ui.pushButton_4.clicked.connect(slot) # +
ui.pushButton_6.clicked.connect(slot) # -
ui.pushButton_10.clicked.connect(slot) # x
ui.pushButton_14.clicked.connect(slot) # /
ui.pushButton_18.clicked.connect(slot) # (
ui.pushButton_19.clicked.connect(slot) # ^
ui.pushButton_20.clicked.connect(slot) # )
ui.pushButton_17.clicked.connect('C')
ui.pushButton_3.clicked.connect('=')
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Чтобы передать что-то в функцию/метод, вы можете воспользоваться функцией lambda.
Выглядит это так:
self.pushButton.clicked.connect(lambda ch, x='0': self.null(x))
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.math = ""
self.realmath = ""
self.pushButton = QPushButton('0')
self.pushButton.clicked.connect(lambda ch, x='0': self.null(x))
self.pushButton_7 = QPushButton('1')
self.pushButton_7.clicked.connect(lambda ch, x='1': self.slot(x))
layout = QVBoxLayout(self)
layout.addWidget(self.pushButton)
layout.addWidget(self.pushButton_7)
# ...
'''
ui.pushButton.clicked.connect(null(0))
ui.pushButton_7.clicked.connect(slot) #1
ui.pushButton_8.clicked.connect(slot) #2
ui.pushButton_5.clicked.connect(slot) #3
ui.pushButton_11.clicked.connect(slot) #4
ui.pushButton_12.clicked.connect(slot) #5
ui.pushButton_9.clicked.connect(slot) #6
ui.pushButton_15.clicked.connect(slot) #7
ui.pushButton_16.clicked.connect(slot) #8
ui.pushButton_13.clicked.connect(slot) #9
ui.pushButton_2.clicked.connect(slot) # .
ui.pushButton_4.clicked.connect(slot) # +
ui.pushButton_6.clicked.connect(slot) # -
ui.pushButton_10.clicked.connect(slot) # x
ui.pushButton_14.clicked.connect(slot) # /
ui.pushButton_18.clicked.connect(slot) # (
ui.pushButton_19.clicked.connect(slot) # ^
ui.pushButton_20.clicked.connect(slot) # )
ui.pushButton_17.clicked.connect('C') # не правильно
ui.pushButton_3.clicked.connect('=') # не правильно
'''
def slot(self, x):
# pass
self.realmath += str(x)
self.math += str(x)
print(f'slot: realmath={self.realmath}, math={self.math}')
def null(self, x):
# global math, realmath # глобальные переменные это ЗЛО !
self.realmath += str(x)
self.math += str(x)
# print(self.realmath)
print(f'null: realmath={self.realmath}, math={self.math}')
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Window()
w.show()
sys.exit(app.exec_())
