Gültigkeitsbereiche von Variablen

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
tom16092
User
Beiträge: 5
Registriert: Sonntag 3. Mai 2020, 22:13

Guten Tag,

ich bräuchte einmal einen kleinen Denkanstoß zu einem Problem mit dem Verwenden von Variablen zwischen mehreren Funktionen.

Ich habe dafür zunächst folgende Funktionen in einer Klasse (habe mal alles unnötige weggelassen):

Code: Alles auswählen

def open_internetsearch(self):
        self.main_isearch = Tk()
        self.main_isearch.title('search')
        self.main_isearch.geometry('250x50')
        self.search_entry = Entry(self.main_isearch, bd = 5, width = 20)
        self.start_button = Button(self.main_isearch, text = 'Search', width = 80, command = self.opensearch)
        self.search_entry.pack(side = LEFT)
        self.start_button.pack(side = RIGHT)
        self.main_isearch.mainloop()
        
        global text
        self.text = self.search_entry.get()
        
    def opensearch(self):
        global text
        self.text_int = text
        messagebox.showinfo(message = text_int, title = "Info")
        print('tst')

Verwende ich die 'global - Begriffe' hier richtig oder wie genau muss ich die Variable definieren damit ich sie in verschiedenen Funktionen verwenden kann? Blicke da leider noch nicht ganz durch und währe sehr froh über ein bisschen Hilfe!

Vielen Dank und einen schönen Tag
Tom
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Global sollte gar nicht im Programm verwendet werden. Alle Variablen die eine Funktion braucht soll diese über Parameter bekommen. Mit return kannst du etwas aus einer Funktion zurückgeben.

Bsp:

Code: Alles auswählen

def addiere_zahlen(zahl1, zahl2):
    return zahl1 + zahl2
       
def main():    
    ergebnis = addiere_zahlen(5,5)
    print(ergebnis)
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@tom16092: Man sollte auch keine Sternchen-Importe machen.

Alle Attribute eines Objekts sollten nach Abarbeitung der `__init__()`-Methode existieren. Man fügt nicht in beliebigen anderen Methoden neue Attribute zu einem Objekt hinzu.

Es darf nur ein `Tk`-Objekt geben und es sollte nur eine GUI-Hauptschleife (`mainloop()`) laufen. Zusätzliche Fenster erstellt man mit `tkinter.Toplevel`. Für so supereinfache Eingabefenster gibt es auch Funktionen im `tkinter.simpledialog`-Modul.

Namen sollten keine Abkürzungen enthalten. Wenn man `internet_search` meint, sollte man nicht `isearch` schreiben. Und was soll das `_int` bei `text_int` bedeuten? Integer? Internet? Genau wegen solcher Verwirrungen sind Abkürzungen keine gute Idee.

Es macht keinen Sinn einfach alles an das Objekt zu binden. Da gehört nur das hin was den aktuellen Zustand des Objekts beschreibt und tatsächlich benötigt wird.

Um das Gleichheitszeichen bei Schlüsselwortargumenten gehören keine Leerzeichen.

Die Fenstergrösse solltest Du nicht selbst vorgeben. Wenn der Benutzer eine grosse Schrift eingestellt hat, weil er schlecht sieht, oder eine sehr hohe Bildschirmauflösung hat (oder beides), dann passt der Inhalt am Ende nicht in den Platz den Du da fest vorgibst.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten