Fehlermeldung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
4Dddd
User
Beiträge: 2
Registriert: Sonntag 20. Juni 2021, 19:24

Hi Leute,
Ich bin zurzeit an den Wochenenden bei uns in der Gegend im Schwimmbad angestellt und wegen der Coronabeschränkung dürfen nur eine bestimmte Anzahl an Personen rein. Da mir Aufschreiben der Personen, die rein und raus gehen zu "langweilig" :lol: ist, hab ich versucht mir ein Script dazu zu schreiben. Ich hab dies mit Kivy gemacht, um es auf meinem Handy abspielen zu können. Soweit hat alles funktioniert, nur wenn ich in den Standby Modus geschaltet have, war die Zähleranzeige immer wieder bei Null. Nun hab ich versucht, das ganze mit einer .txt zu erweitern, in der immer die aktuelle Besucherzahl gespeichert wird und bei neustart der App wieder ausgelesen wird. Ich bekomme nun diverse Fehlermeldungen, je nach dem wie ich mein Script verändere, aber öffnen lässt es sich seit Implementation der "besucher.txt" nicht mehr. In meinem virtenv habe ich nur kivy installiert, also kann es sich eig nicht mit etwas anderem beißen, wovon ich bei Fehlerrecherche öfter gelesen hab. Gerne kann ich die Dateien auch in einem Google-Drive Ordner hochladen, aber in der .txt soll anfänglich 0 stehen, da morgens logischerweise 0 Besucher im Bad sind. Ein "resett button" wird später noch hinzugefügt, falls mir jemand bei der Lösung meines Problems helfen kann :cry: . Um es zusammenzufassen: Ich möchte mit einem Programm die Besucher zählen, die aktuellen sollen aus einer .txt ausgelesen werden, und wenn einer rein (oder raus) geht, soll diese in der .txt stehende Zahl verändert (gespeichert bzw überschrieben) werden. Schonmal Danke im Vorraus :)

Hier der Code der main.py:

Code: Alles auswählen

import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.clock import Clock
from kivy.config import Config 
from kivy.core.window import Window 




File = open("besucher.txt", "r")
Ints = []
for val in File.read().split():
    Ints.append(int(val))   
File.close()
nummer = Ints[0]
print(type(nummer))
print(nummer)
global zahl
zahl = nummer




class MyGridLayout(GridLayout):



    def __init__(self, **kwargs):
        super(MyGridLayout, self).__init__(**kwargs)

        
        self.zahl = zahl

        self.cols = 3

        self.label = Label(text="Aktuelle Besucherzahl : {} ".format(str(self.zahl)))
        self.add_widget(self.label)
        
        self.plus = Button(text="Ein Besucher mehr", font_size=40)
        self.plus.bind(on_press=self.besucherplus)
        self.add_widget('self.plus')

        self.minus = Button(text="Ein Besucher weniger", font_size=40)
        self.minus.bind(on_press=self.besucherminus)
        self.add_widget(self.minus)

    def besucherplus(self, instance):

        self.zahl += 1
        print(self.zahl)
        self.remove_widget(self.label)
        self.label = Label(text="Aktuelle Besucherzahl : {} ".format(str(self.zahl)))
        self.add_widget(self.label)
        #if self.zahl <= 0:
        #   self.zahl = 0

        

    def besucherminus(self, instance):

        self.zahl -= 1
        print(self.zahl)
        self.remove_widget(self.label)
        self.label = Label(text="Aktuelle Besucherzahl : {} ".format(str(self.zahl)))
        self.add_widget(self.label)
        #if self.zahl <= 0:
        #    self.zahl = 0

    def datei(self, instance):
        filew = open("besucher.txt", "w")
        filew.write(str(self.zahl))
        filew.close()
        
    


class MyApp(App):
    def build(self):
        return MyGridLayout()


if __name__ == '__main__':
    MyApp().run()
    
4Dddd
User
Beiträge: 2
Registriert: Sonntag 20. Juni 2021, 19:24

Hey zusammen
Hab das Problem leider immernoch nicht gelöst :cry:
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bitte zeig die Fehlermeldungen. Das durch bloßes Meditieren über den Code zu erschließen ist schwer.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Dateien öffnet man immer innerhalb eines with-Statements.
Warum hast Du eine Schleife, die viele Strings in Zahlen konvertiert, Du dann aber nur das erste Element nimmst? Warum speicherst Du diese Zahl in `nummer` um sie dann nach `zahl` zu speichern? Also warum nicht gleich nur eine Zahl konvertieren und direkt in `zahl` speichern?
Globale Variablen sind schlecht, und wie Du `global` benutzt, ist quatsch.

Warum übergibst Du add_widget den String 'self.plus'?
Du hast an Stellen zu viele Leerzeilen, wo keine hingehören. Das erschwert das Lesen ziemlich.
Bei format muß man die Argumente nicht selbst in Strings konvertieren.
Statt ständig neue Labels zu erzeugen, nimmt man das eine Label und verändert den Text.

Code: Alles auswählen

import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button


def read_besucher():
    with open("besucher.txt", "r") as file:
        return int(file.read())


class MyGridLayout(GridLayout):
    def __init__(self, cols=3, **kwargs):
        super(MyGridLayout, self).__init__(**kwargs)
        self.zahl = read_besucher()
        self.label = Label()
        self.add_widget(self.label)
        
        self.plus = Button(text="Ein Besucher mehr", font_size=40)
        self.plus.bind(on_press=self.besucherplus)
        self.add_widget(self.plus)

        self.minus = Button(text="Ein Besucher weniger", font_size=40)
        self.minus.bind(on_press=self.besucherminus)
        self.add_widget(self.minus)
        self.update_label()

    def update_label(self):
        self.label.text = f"Aktuelle Besucherzahl : {self.zahl}"
        self.minus.disabled = self.zahl == 0

    def besucherplus(self, instance):
        self.zahl += 1
        self.update_label()

    def besucherminus(self, instance):
        self.zahl -= 1
        self.update_label()

    def write_besucher(self, instance):
        with open("besucher.txt", "w") as output:
            output.write(str(self.zahl))


class MyApp(App):
    def build(self):
        return MyGridLayout()

if __name__ == '__main__':
    MyApp().run()
Antworten