Frage-Antwort-Spiel

Fragen zu Tkinter.
Antworten
Maestro
User
Beiträge: 8
Registriert: Freitag 8. April 2022, 09:05

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 :roll: :

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 :D

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
Sirius3
User
Beiträge: 18051
Registriert: Sonntag 21. Oktober 2012, 17:20

Zeig Deinen Code, sonst kann man die Frage nicht beantworten.
Benutzeravatar
__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; }
}
Maestro
User
Beiträge: 8
Registriert: Freitag 8. April 2022, 09:05

@_blackjack_: Nicht so wirklich. Habe erst damit angefangen und wurstel mich einfach mal dadurch :D
Maestro
User
Beiträge: 8
Registriert: Freitag 8. April 2022, 09:05

@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()
Sirius3
User
Beiträge: 18051
Registriert: Sonntag 21. Oktober 2012, 17:20

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.

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()
Maestro
User
Beiträge: 8
Registriert: Freitag 8. April 2022, 09:05

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 :D
Antworten