Untitled

 avatar
unknown
plain_text
2 months ago
4.2 kB
11
Indexable
import wx

class Kalk(wx.Frame):
    def __init__(self, *args, **kwds):
        kwds["style"] = kwds.get("style", 0) | wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.SetSize((400, 400))
        self.SetTitle("Prosty Kalkulator")

        self.glowny_panel = wx.Panel(self, wx.ID_ANY)
        szuflada_glowna = wx.BoxSizer(wx.VERTICAL)

        szuflada_gora = wx.BoxSizer(wx.HORIZONTAL)
        
        self.pole_liczba1 = wx.TextCtrl(self.glowny_panel, wx.ID_ANY, "")
        szuflada_gora.Add(self.pole_liczba1, 1, wx.EXPAND | wx.ALL, 5)

        self.lista_znakow = wx.ComboBox(self.glowny_panel, wx.ID_ANY, choices=["+", "-", "*", "/"], style=wx.CB_DROPDOWN | wx.CB_READONLY)
        self.lista_znakow.SetSelection(0)
        szuflada_gora.Add(self.lista_znakow, 0, wx.ALL, 5)

        self.pole_liczba2 = wx.TextCtrl(self.glowny_panel, wx.ID_ANY, "")
        szuflada_gora.Add(self.pole_liczba2, 1, wx.EXPAND | wx.ALL, 5)

        szuflada_glowna.Add(szuflada_gora, 0, wx.EXPAND, 0)

        szuflada_srodek = wx.BoxSizer(wx.HORIZONTAL)
        
        self.przycisk_licz = wx.Button(self.glowny_panel, wx.ID_ANY, "OBLICZ")
        szuflada_srodek.Add(self.przycisk_licz, 1, wx.EXPAND | wx.ALL, 5)

        self.pole_wynik = wx.TextCtrl(self.glowny_panel, wx.ID_ANY, "", style=wx.TE_READONLY)
        szuflada_srodek.Add(self.pole_wynik, 1, wx.EXPAND | wx.ALL, 5)

        szuflada_glowna.Add(szuflada_srodek, 0, wx.EXPAND, 0)

        etykieta_pamiec = wx.StaticText(self.glowny_panel, wx.ID_ANY, "Zapisane operacje:")
        szuflada_glowna.Add(etykieta_pamiec, 0, wx.LEFT | wx.TOP, 5)

        self.pole_pamiec = wx.TextCtrl(self.glowny_panel, wx.ID_ANY, "", style=wx.TE_MULTILINE | wx.TE_READONLY)
        szuflada_glowna.Add(self.pole_pamiec, 1, wx.EXPAND | wx.ALL, 5)

        self.glowny_panel.SetSizer(szuflada_glowna)
        self.Layout()

        self.przycisk_licz.Bind(wx.EVT_BUTTON, self.wykonaj_obliczenie)

        self.pamiec_dzialan = []
        try:
            plik = open('zapis.txt', 'tr')
            while True:
                linia = plik.readline()
                if linia:
                    self.pamiec_dzialan.append(linia.strip())
                else:
                    break
            plik.close()
        except FileNotFoundError:
            pass

        self.aktualizuj_pamiec()

    def aktualizuj_pamiec(self):
        tekst = ""
        for linia in self.pamiec_dzialan:
            tekst += linia + "\n"
        self.pole_pamiec.SetValue(tekst)

    def wykonaj_obliczenie(self, event):
        try:
            zmienna_a = float(self.pole_liczba1.GetValue())
            zmienna_b = float(self.pole_liczba2.GetValue())
        except ValueError:
            wx.MessageBox("Bledne dane!")
            return

        znak = self.lista_znakow.GetValue()
        rezultat = 0

        if znak == "+":
            rezultat = zmienna_a + zmienna_b
        elif znak == "-":
            rezultat = zmienna_a - zmienna_b
        elif znak == "*":
            rezultat = zmienna_a * zmienna_b
        elif znak == "/":
            if zmienna_b == 0:
                wx.MessageBox("Blad dzielenia!")
                return
            rezultat = zmienna_a / zmienna_b

        self.pole_wynik.SetValue(str(rezultat))

        operacja = str(zmienna_a) + " " + znak + " " + str(zmienna_b) + " = " + str(rezultat)
        self.pamiec_dzialan.append(operacja)

        while len(self.pamiec_dzialan) > 10:
            self.pamiec_dzialan.pop(0)

        self.aktualizuj_pamiec()

        try:
            plik = open('zapis.txt', 'tw')
            for linia in self.pamiec_dzialan:
                plik.write(linia + '\n')
            plik.close()
        except Exception:
            pass

class AplikacjaKalk(wx.App):
    def OnInit(self):
        self.okno = Kalk(None, wx.ID_ANY, "")
        self.SetTopWindow(self.okno)
        self.okno.Show()
        return True

if __name__ == "__main__":
    uruchom_kalk = AplikacjaKalk(0)
    uruchom_kalk.MainLoop()
Editor is loading...
Leave a Comment