[Python] How can I add a 3rd argument to the Flet tutorial calculator project?

Discussão em 'Python' iniciado por Stack, Setembro 30, 2024.

  1. Stack

    Stack Membro Participativo

    import flet as ft


    class CalcButton(ft.ElevatedButton):
    def __init__(self, text, button_clicked, expand=1):
    super().__init__()
    self.text = text
    self.expand = expand
    self.on_click = button_clicked
    self.data = text


    class DigitButton(CalcButton):
    def __init__(self, text, button_clicked, expand=1):
    CalcButton.__init__(self, text, button_clicked, expand)
    self.bgcolor = ft.colors.WHITE24
    self.color = ft.colors.WHITE


    class ActionButton(CalcButton):
    def __init__(self, text, button_clicked):
    CalcButton.__init__(self, text, button_clicked)
    self.bgcolor = ft.colors.ORANGE
    self.color = ft.colors.WHITE


    class ExtraActionButton(CalcButton):
    def __init__(self, text, button_clicked):
    CalcButton.__init__(self, text, button_clicked)
    self.bgcolor = ft.colors.BLUE_GREY_100
    self.color = ft.colors.BLACK


    class CalculatorApp(ft.Container):
    # application's root control (i.e. "view") containing all other controls
    def __init__(self):
    super().__init__()
    self.reset()

    self.result = ft.Text(value="0", color=ft.colors.WHITE, size=20)
    self.width = 350
    self.bgcolor = ft.colors.BLACK
    self.border_radius = ft.border_radius.all(20)
    self.padding = 20
    self.content = ft.Column(
    controls=[
    ft.Row(controls=[self.result], alignment="end"),
    ft.Row(
    controls=[
    ExtraActionButton(
    text="AC", button_clicked=self.button_clicked
    ),
    ExtraActionButton(
    text="+/-", button_clicked=self.button_clicked
    ),
    ExtraActionButton(text="%", button_clicked=self.button_clicked),
    ActionButton(text="/", button_clicked=self.button_clicked),
    ]
    ),
    ft.Row(
    controls=[
    DigitButton(text="7", button_clicked=self.button_clicked),
    DigitButton(text="8", button_clicked=self.button_clicked),
    DigitButton(text="9", button_clicked=self.button_clicked),
    ActionButton(text="*", button_clicked=self.button_clicked),
    ]
    ),
    ft.Row(
    controls=[
    DigitButton(text="4", button_clicked=self.button_clicked),
    DigitButton(text="5", button_clicked=self.button_clicked),
    DigitButton(text="6", button_clicked=self.button_clicked),
    ActionButton(text="-", button_clicked=self.button_clicked),
    ]
    ),
    ft.Row(
    controls=[
    DigitButton(text="1", button_clicked=self.button_clicked),
    DigitButton(text="2", button_clicked=self.button_clicked),
    DigitButton(text="3", button_clicked=self.button_clicked),
    ActionButton(text="+", button_clicked=self.button_clicked),
    ]
    ),
    ft.Row(
    controls=[
    DigitButton(
    text="0", expand=2, button_clicked=self.button_clicked
    ),
    DigitButton(text=".", button_clicked=self.button_clicked),
    ActionButton(text="=", button_clicked=self.button_clicked),
    ]
    ),
    ]
    )

    def button_clicked(self, e):
    data = e.control.data
    print(f"Button clicked with data = {data}")
    if self.result.value == "Error" or data == "AC":
    self.result.value = "0"
    self.reset()

    elif data in ("1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "."):
    if self.result.value == "0" or self.new_operand == True:
    self.result.value = data
    self.new_operand = False
    else:
    self.result.value = self.result.value + data

    elif data in ("+", "-", "*", "/"):
    self.result.value = self.calculate(
    self.operand1, float(self.result.value), self.operator
    ) <-------------
    self.operator = data
    if self.result.value == "Error":
    self.operand1 = "0"
    else:
    self.operand1 = float(self.result.value)
    self.new_operand = True

    elif data in ("="):
    self.result.value = self.calculate(
    self.operand1, float(self.result.value), self.operator
    ) <------------------
    self.reset()

    elif data in ("%"):
    self.result.value = float(self.result.value) / 100
    self.reset()

    elif data in ("+/-"):
    if float(self.result.value) > 0:
    self.result.value = "-" + str(self.result.value)

    elif float(self.result.value) < 0:
    self.result.value = str(
    self.format_number(abs(float(self.result.value)))
    )

    self.update()

    def format_number(self, num):
    if num % 1 == 0:
    return int(num)
    else:
    return num

    def calculate(self, operand1, operand2, operator): <---------------

    if operator == "+":
    return self.format_number(operand1 + operand2)

    elif operator == "-":
    return self.format_number(operand1 - operand2)

    elif operator == "*":
    return self.format_number(operand1 * operand2)

    elif operator == "/":
    if operand2 == 0:
    return "Error"
    else:
    return self.format_number(operand1 / operand2)

    def reset(self):
    self.operator = "+"
    self.operand1 = 0
    self.new_operand = True


    def main(page: ft.Page):
    page.title = "Calc App"
    # create application instance
    calc = CalculatorApp()

    # add application's root control to the page
    page.add(calc)


    ft.app(target=main)


    elif operator == "ax^2+bx+c=0":
    return selv.solv()
    def solv():
    a = float(input("a: "))
    b = float(input("b: "))
    c = float(input("c: "))
    if a != 0:
    delta = b**2 - 4*a*c
    if delta > 0:
    x1 = (-b + delta**0.5) / (2*a)
    x2 = (-b - delta**0.5) / (2*a)
    return f"x1 = {x1}, x2 = {x2}"
    elif delta == 0:
    x = -b / (2*a)
    return f"x = {x}"
    else:
    return "Equation with no solution"
    else:
    return "Not a quadratic equation"

    Continue reading...

Compartilhe esta Página