Calculadora: criando um Slot com dados para o Signal "clicked" de cada botão

This commit is contained in:
Luiz Otávio
2023-03-01 15:23:18 -03:00
parent 8c1051e9eb
commit dd9259cb9b
2 changed files with 21 additions and 2 deletions

View File

@@ -1,3 +1,5 @@
from display import Display
from PySide6.QtCore import Slot
from PySide6.QtWidgets import QGridLayout, QPushButton
from utils import isEmpty, isNumOrDot
from variables import MEDIUM_FONT_SIZE
@@ -13,10 +15,11 @@ class Button(QPushButton):
font.setPixelSize(MEDIUM_FONT_SIZE)
self.setFont(font)
self.setMinimumSize(75, 75)
self.setCheckable(True)
class ButtonsGrid(QGridLayout):
def __init__(self, *args, **kwargs) -> None:
def __init__(self, display: Display, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
self._gridMask = [
@@ -26,6 +29,7 @@ class ButtonsGrid(QGridLayout):
['1', '2', '3', '+'],
['', '0', '.', '='],
]
self.display = display
self._makeGrid()
def _makeGrid(self):
@@ -37,3 +41,18 @@ class ButtonsGrid(QGridLayout):
button.setProperty('cssClass', 'specialButton')
self.addWidget(button, rowNumber, colNumber)
buttonSlot = self._makeButtonDisplaySlot(
self._insertButtonTextToDisplay,
button,
)
button.clicked.connect(buttonSlot) # type: ignore
def _makeButtonDisplaySlot(self, func, *args, **kwargs):
@Slot(bool)
def realSlot(_):
func(*args, **kwargs)
return realSlot
def _insertButtonTextToDisplay(self, button):
button_text = button.text()
self.display.insert(button_text)

View File

@@ -29,7 +29,7 @@ if __name__ == '__main__':
window.addWidgetToVLayout(display)
# Grid
buttonsGrid = ButtonsGrid()
buttonsGrid = ButtonsGrid(display)
window.vLayout.addLayout(buttonsGrid)
# Executa tudo