Seite 1 von 1

Wie Variable aus Funktion bringen um im "main" nutzen zu können

Verfasst: Donnerstag 5. Juli 2018, 15:37
von xXSkyWalkerXx1
Ich habe ne Funktion, die die Variable "shootrate" wiedergeben soll, damit die Variable "script" sie im Hauptkörper der Datei (also nicht in der Funktion) nutzen kann.
Die Funktion sieht so aus:

Code: Alles auswählen

def rapidfireSettings():
    titleLabel["text"] = "RapidFire"
    titleLabel.pack(side="top",pady=12)
    previewLabel.pack(pady = 65)
    info1Label.pack()
    info2Label.pack(pady=25)
    setting1Label.pack()
    setting2Label.pack()
    on.pack()
    off.pack()
    setting3Label["text"] = "Geschwindigkeit:"
    setting3Label.pack()
    entry1.pack()

    entry2.pack_forget()
    setting4Label.pack_forget()
    entry3.pack_forget()
    setting5Label.pack_forget()

    shootrate = entry1.get()
    return shootrate
    
... Und die Variable "script" im Hauptkörper:

Code: Alles auswählen

script =   "int shoot_rate         = "+str(shootrate)+"; " 
Doch mit return klappt das iwie nicht und globalisieren möchte ich sie auch nicht, aufgrund es mehrere Variablen gibt, die auf entry1 zugreifen und "script" eigentlich größer/längerer Text ist.
Das ist nur ein kleiner Ausschnitt - vom Wesentlichen.

Danke für die Hilfe in Vorraus, besonders an "__deets__" wahrscheinlich wieder! ^^

Re: Wie Variable aus Funktion bringen um im "main" nutzen zu können

Verfasst: Donnerstag 5. Juli 2018, 15:58
von Sirius3
@xXSkyWalkerXx1: .. und das wesentliche fehlt. Wo wird denn rapidfireSettings (sollte eigentlich rapidfire_settings heißen) aufgerufen und wo die script-Variable gesetzt.

Es macht keinen Sinn, den Wert von entry1 sofort nach dem Erzeugen abzufragen, dann da ist es noch leer. Statt lange Scripts mit Strings zusammenzustückeln solltest Du eine Template-Engine in Erwägung ziehen.

Re: Wie Variable aus Funktion bringen um im "main" nutzen zu können

Verfasst: Donnerstag 5. Juli 2018, 16:55
von xXSkyWalkerXx1
Sirius3 hat geschrieben: Donnerstag 5. Juli 2018, 15:58 @xXSkyWalkerXx1: .. und das wesentliche fehlt. Wo wird denn rapidfireSettings (sollte eigentlich rapidfire_settings heißen) aufgerufen und wo die script-Variable gesetzt.

Es macht keinen Sinn, den Wert von entry1 sofort nach dem Erzeugen abzufragen, dann da ist es noch leer. Statt lange Scripts mit Strings zusammenzustückeln solltest Du eine Template-Engine in Erwägung ziehen.
Zu deiner Frage, wo die Funktion aufgerufen wird:

Code: Alles auswählen

# Hauptfenster - Widgetplatzierung:
generateButton.pack(pady=12)
infoLabel1.pack(pady=12)
layoutButton.pack(pady=8)
infoLabel2.pack(pady=12)
aimbotButton.pack(pady=8)
aimassistButton.pack(pady=8)
norecoilButton.pack(pady=8)
rapidfireButton.pack(pady=8) #Hier, per Knopfdruck
jitterButton.pack(pady=8)
autorunButton.pack(pady=8)
Davor wird natürlich erstmal der Button beschrieben:

Code: Alles auswählen

rapidfireButton = tkinter.Button(frameLeft, text = "RapidFire", command = rapidfireSettings)
Eine Template Engine - hm, weiß nicht.

Und zu deiner Aussage: "Es macht keinen Sinn, den Wert von entry1 sofort nach dem Erzeugen abzufragen, dann da ist es noch leer.":
Die Entry soll erst abgefragt werden, wenn eine integer eingetragen wurde.
Müsste das so aussehen?

Code: Alles auswählen

if entry1.get() == int(entry1.get()):
	shootrate = entry1.get()

Re: Wie Variable aus Funktion bringen um im "main" nutzen zu können

Verfasst: Donnerstag 5. Juli 2018, 17:01
von __blackjack__
Das ``return`` macht in der `rapidfire_settings()` keinen Sinn wenn es von der GUI-Hauptschleife aufgerufen wird. Die kann mit so einem Rückgabewert nichts anfangen. Du wirst hier um objektorientierte Programmierung nicht herum kommen.

Das Entry darf erst abgefragt werden wenn der Benutzer etwas eingetragen hat. Meistens ist es ja so das man das dadurch erkennt das er eine Schaltfläche drückt wenn er fertig ist und das eingetragene dann verarbeitet werden soll.

Re: Wie Variable aus Funktion bringen um im "main" nutzen zu können

Verfasst: Donnerstag 5. Juli 2018, 17:11
von xXSkyWalkerXx1
__blackjack__ hat geschrieben: Donnerstag 5. Juli 2018, 17:01 Das Entry darf erst abgefragt werden wenn der Benutzer etwas eingetragen hat. Meistens ist es ja so das man das dadurch erkennt das er eine Schaltfläche drückt wenn er fertig ist und das eingetragene dann verarbeitet werden soll.
Würde das so aussehen müssen, wenn die Entry auf eine integer warten soll...

Code: Alles auswählen

if entry1.get() == int(entry1.get()):
	shootrate = entry1.get()
???

Re: Wie Variable aus Funktion bringen um im "main" nutzen zu können

Verfasst: Donnerstag 5. Juli 2018, 17:11
von xXSkyWalkerXx1
xXSkyWalkerXx1 hat geschrieben: Donnerstag 5. Juli 2018, 17:11
__blackjack__ hat geschrieben: Donnerstag 5. Juli 2018, 17:01 Das Entry darf erst abgefragt werden wenn der Benutzer etwas eingetragen hat. Meistens ist es ja so das man das dadurch erkennt das er eine Schaltfläche drückt wenn er fertig ist und das eingetragene dann verarbeitet werden soll.
Würde das so aussehen müssen, wenn die Entry auf eine integer warten soll...

Code: Alles auswählen

if entry1.get() == int(entry1.get()):
	shootrate = entry1.get()
???
Und wegen OOP - naguuut. ^^ Aber warum eigentlich genau OOP?

Re: Wie Variable aus Funktion bringen um im "main" nutzen zu können

Verfasst: Donnerstag 5. Juli 2018, 17:19
von __blackjack__
Es gibt da keinen Code den man an *einer* Stelle schreibt der das macht. Du erstellst an einer Stelle ein Entry und eine Schaltfläche, und in dem Code der auf das betätigen der Schaltfläche reagiert, rufst Du dann den Inhalt des Entry ab. Und weil *der* Code das Entry dafür kennen muss, und dann wahrscheinlich auch ein Model/Programmlogik die diesen Wert dann für irgend etwas verwenden, braucht man OOP. Alternative wären Closures, aber in Python ist der Weg über OOP der normale.

Re: Wie Variable aus Funktion bringen um im "main" nutzen zu können

Verfasst: Donnerstag 5. Juli 2018, 17:28
von xXSkyWalkerXx1
Aber eins verstehe ich nicht, was haben die doppelten Unterstriche vor und nach einem Funktionnamen zu tun?

Re: Wie Variable aus Funktion bringen um im "main" nutzen zu können

Verfasst: Donnerstag 5. Juli 2018, 17:41
von __blackjack__
@xXSkyWalkerXx1: Die gehören halt zu den Namen. Das sind oder sollten nur Namen sein die eine Bedeutung für Python haben, also keine die man sich selbst ausdenkt. Die konkreten Namen kann man in der Python-Dokumentation nachlesen.

Re: Wie Variable aus Funktion bringen um im "main" nutzen zu können

Verfasst: Donnerstag 5. Juli 2018, 17:45
von xXSkyWalkerXx1
Achsooo... Danke! :D

Re: Wie Variable aus Funktion bringen um im "main" nutzen zu können

Verfasst: Donnerstag 5. Juli 2018, 18:43
von xXSkyWalkerXx1
Und was hat es damit auf sich?
...was hat das für ein Zweck?
...tut es die Klasse aufrufen?

Code: Alles auswählen

if __name__ == "__main__":
    main()

Re: Wie Variable aus Funktion bringen um im "main" nutzen zu können

Verfasst: Donnerstag 5. Juli 2018, 19:01
von ThomasL