Hallo zusammen,
ich habe vor kurzem mit dem Programmieren angefangen und möchte gerne ein einfaches Frage-Antwort-Spiel über GUI(tkinter) erstellen. Hierzu habe ich ein Eingabefeld erstellt. in der die Antworten platziert werden können. Des Weiteren habe ich ein Button "Antworten" erstelllt. Die Frage erscheint als Label über dem Eingabefeld.
Jetzt zu meinem Anfängerproblem :
Nach einer eingegeben Antwort verändert sich der Text des Labels und reagiert auf die eingegebene Antwort und stellt anschließend eine neue Frage. Wenn ich jetzt aber ins Eingabefeld auf die neu gestellte Frage antworte, reagiert das Label wieder auf die anfangs gestellte Frage. Ich habe die Vermutung, dass ich Probleme mit dem Button-command habe bzw. mit der anschließenden Definiton des Button-Befehls. Ich habe schon ausführlich recherchiert, habe aber noch keine Lösung gefunden. Vielleicht findet sich hier jemand, der einem blutigen Anfänger weiterhelfen kann
Ziel des Spiel ist es ca. 10 Fragen nacheinander abzufragen. Die Antworten sollen aber eingelesen werden und mit if und else Möglichkeiten beantwortet werden können.
LG
Frage-Antwort-Spiel
- __blackjack__
- User
- Beiträge: 13533
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Maestro: Wenn Du Anfänger bist, hast Du dann schon objektorientierte Programmierung (OOP) halbwegs drauf? Also eigene Klassen schreiben. Denn das ist Voraussetzung für GUI-Programmierung.
Code: Alles auswählen
- (void)countSheep {
unsigned int sheep = 0;
while ( ! [self isAsleep]) { ++sheep; }
}
@Sirius3: Ich glaube das Problem liegt bei "def ausgeben():" bzw. dass ich wohl OOP noch nicht ganz begriffen habe. Vll kannst du mir ja weiterhelfen
import tkinter as tk
from PIL import Image, ImageTk
#Geometrie
root=tk.Tk()
root.title('Maze of Madness')
root.geometry('780x400')
#Bild
image = Image.open('laberyntus-g15b2b2afb_640.jpg').resize((200,150))
photo = ImageTk.PhotoImage(image)
def ausgeben():
text_variable.set('Euer Name lautet also ' + eingabe1.get() + '.' + ' Ein sehr berüchtigter Name im Lande! Nun sagt mir Euer Alter, ' + eingabe1.get() + ' aus dem Lande.')
eingabe1.delete(0,'end')
if eingabe.get():
text_variable.set('Auch mit alten Knochen können noch so einige Abenteuer bestritten werden.')
#Labels
label1= tk.Label(root, text='''Willkommen im Labyrinth der unendlichen Irrungen.
Ein Labyrinth, welches Euch verborgene Wahrheiten oder faulende Wirrungen offenbart.''',fg='black',font=('Arial',10))
label1.pack()
label2=tk.Label(root, image=photo)
label2.pack()
text_variable=tk.StringVar()
text_variable.set('Wie lautet Euer Name, Fremder?')
label3=tk.Label(root, textvariable=text_variable)
label3.pack()
#Eingabe und Buttons
eingabe1=tk.Entry(width=20,fg='black',bg='beige',font=('Arial',9))
eingabe1.pack()
button1=tk.Button(root,text='Antworten', width=10,height=2,command=ausgeben, fg='white',bg='green',font=('Arial',10))
button1.pack(side='bottom')
root.mainloop()
import tkinter as tk
from PIL import Image, ImageTk
#Geometrie
root=tk.Tk()
root.title('Maze of Madness')
root.geometry('780x400')
#Bild
image = Image.open('laberyntus-g15b2b2afb_640.jpg').resize((200,150))
photo = ImageTk.PhotoImage(image)
def ausgeben():
text_variable.set('Euer Name lautet also ' + eingabe1.get() + '.' + ' Ein sehr berüchtigter Name im Lande! Nun sagt mir Euer Alter, ' + eingabe1.get() + ' aus dem Lande.')
eingabe1.delete(0,'end')
if eingabe.get():
text_variable.set('Auch mit alten Knochen können noch so einige Abenteuer bestritten werden.')
#Labels
label1= tk.Label(root, text='''Willkommen im Labyrinth der unendlichen Irrungen.
Ein Labyrinth, welches Euch verborgene Wahrheiten oder faulende Wirrungen offenbart.''',fg='black',font=('Arial',10))
label1.pack()
label2=tk.Label(root, image=photo)
label2.pack()
text_variable=tk.StringVar()
text_variable.set('Wie lautet Euer Name, Fremder?')
label3=tk.Label(root, textvariable=text_variable)
label3.pack()
#Eingabe und Buttons
eingabe1=tk.Entry(width=20,fg='black',bg='beige',font=('Arial',9))
eingabe1.pack()
button1=tk.Button(root,text='Antworten', width=10,height=2,command=ausgeben, fg='white',bg='green',font=('Arial',10))
button1.pack(side='bottom')
root.mainloop()
Computer machen das, was man ihnen sagt, und wo genau sagst Du, dass beim zweiten mal auf den Knopf drücken etwas anderes passieren soll, als beim ersten mal?
Du scheinst ja ein typisches Text-Adventure zu schreiben. Dann fang doch ersteinmal an, ein Konsolenprogramm zu schreiben. Denn dort hast Du noch einen linearen Programm-Ablauf. GUIs zu programmieren ist deutlich komplexer.
Zum Code an sich: alles was eine Funktion braucht, muß sie über ihre Argumente bekommen. Benutze keine globalen Variablen!
Programme haben üblicherweise eine main-Funktion, um globale Variablen zu verhindern.
Nummeriere keine Variablen durch, warum eingabe1, oder button1?
`eingabe` wird nirgends definiert.
Du scheinst ja ein typisches Text-Adventure zu schreiben. Dann fang doch ersteinmal an, ein Konsolenprogramm zu schreiben. Denn dort hast Du noch einen linearen Programm-Ablauf. GUIs zu programmieren ist deutlich komplexer.
Zum Code an sich: alles was eine Funktion braucht, muß sie über ihre Argumente bekommen. Benutze keine globalen Variablen!
Programme haben üblicherweise eine main-Funktion, um globale Variablen zu verhindern.
Nummeriere keine Variablen durch, warum eingabe1, oder button1?
`eingabe` wird nirgends definiert.
Code: Alles auswählen
def ask_name():
print('Wie lautet Euer Name, Fremder?')
return input()
def ask_age(name):
print(f'Euer Name lautet also {name}. Ein sehr berüchtigter Name im Lande!')
print(f'Nun sagt mir Euer Alter, {name} aus dem Lande.')
return input()
def main():
print("Willkommen im Labyrinth der unendlichen Irrungen.")
print("Ein Labyrinth, welches Euch verborgene Wahrheiten oder faulende Wirrungen offenbart.")
name = ask_name()
age = ask_age(name)
print('Auch mit alten Knochen können noch so einige Abenteuer bestritten werden.')
if __name__ == "__name__":
main()
Vielen Dank für die Tipps! Mal schauen wie ich es umsetzen kann. Das Konsolenprogramm habe ich schon gemacht. Da der Ablauf schön linear gestaltet werden kann, war es nicht so ein großes Problem. Das Problem kam erst als ich mit GUI eine schöne Benutzeroberfläche gestalten wollte, da war dann der schöne lineare Ablauf nicht mehr für mich umsetzbar