Seite 1 von 1

Gültigkeitsbereiche von Variablen

Verfasst: Montag 8. Juni 2020, 13:02
von tom16092
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

Re: Gültigkeitsbereiche von Variablen

Verfasst: Montag 8. Juni 2020, 13:03
von Jankie
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)

Re: Gültigkeitsbereiche von Variablen

Verfasst: Montag 8. Juni 2020, 13:14
von __blackjack__
@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.