Seite 1 von 1
Hilfe beim Implementieren eines Tests
Verfasst: Sonntag 11. Februar 2024, 20:23
von dvdllyyy
Hallo,
Ich möchte einen Test schreiben: zufällige int Zahlen im Intervall 1-9 werden auf einer GUI einzeln, zentriert angezeigt aber in der position wechselnd, in randomisierter Schriftgröße, für 250 ms. Danach hat man für 900ms die Chance, spacebar zu drücken. Drückt man nicht oder während eine 3 kommt kriegt man einen Fehler. Alles endet nach 900 Zahlen.
Ich habe es mit Tkinter probiert aber bin gescheitert - ich weiß nicht, ob ich buttons oder label nehmen sollte, wie man beliebig platzieren kann, und wie man die zeitspanne zum enter drücken implementiert. Kann mir jemand helfen indem er mir entweder nützliche links sendet, oder mir das hinschreibt? Es ist nicht für eine Hausaufgabe sondern rein aus persönlichem interesse
Danke!
Re: Hilfe beim Implementieren eines Tests
Verfasst: Sonntag 11. Februar 2024, 22:00
von Sirius3
Für Grafiken benutzt man bei tkinter ein Canvas. Und für Zeitintervalle after.
Auf die Leertaste kann man mit bind reagieren.
Re: Hilfe beim Implementieren eines Tests
Verfasst: Montag 12. Februar 2024, 05:05
von dvdllyyy
Hallo,
Danke für deine Hilfe! ich kriege hierfür "name 'Canvas' is not defined" und weiß nicht warum. Hast du eine Idee?
Code: Alles auswählen
import random
def generate_number():
list = ["1","2","3","4","5","6","7","8","9"]
number = random.choice(list)
return number
import tkinter as tk
root = tk.Tk()
canvas = Canvas(root, height=1000, width=1600,bg=grey)
create_text(400,800,text=str(generate_number()))
root.pack()
Re: Hilfe beim Implementieren eines Tests
Verfasst: Montag 12. Februar 2024, 06:23
von Sirius3
Canvas kommt wie Tk aus dem Paket tkinter. Es muss also `tk.Canvas` heißen.
Code: Alles auswählen
import random
import tkinter as tk
def generate_number():
return random.randint(1, 9)
def main():
root = tk.Tk()
canvas = tk.Canvas(root, height=1000, width=1600,bg=grey)
text = canvas.create_text(400,800, text=str(generate_number()))
canvas.pack()
root.mainloop()
if __name__ == "__main__":
main()
Re: Hilfe beim Implementieren eines Tests
Verfasst: Montag 12. Februar 2024, 08:40
von dvdllyyy
Danke!
ich habe hiermit gearbeitet und nicht darüber nachgedacht.
https://tkdocs.com/tutorial/canvas.html
Ich versuche jetzt die Nummer irgendwo randomisiert aber im zentrum anzuzeigen aber ich weiß nicht, wie das geht. Ich habe das hier probiert und sehe überhaupt nichts.
Code: Alles auswählen
import random
import tkinter as tk
def generate_number():
return random.randint(1, 9)
def main():
root = tk.Tk()
canvas = tk.Canvas(root, height=1000, width=1600,background='gray75')
text = canvas.create_text(400,800, text=str(generate_number()))
canvas.pack()
# es ist nichts sichtbar
number_display = tk.Label(root,height=100,width=200,text=str(generate_number))
number_display.pack()
root.mainloop()
if __name__ == "__main__":
main()
Re: Hilfe beim Implementieren eines Tests
Verfasst: Montag 12. Februar 2024, 08:55
von Sirius3
Warum ein Label? Du hast Du die zwei Koordinaten 400,800, mit denen Du genau einstellen kannst, wo der Text erscheinen soll.
Re: Hilfe beim Implementieren eines Tests
Verfasst: Montag 12. Februar 2024, 09:38
von dvdllyyy
Ich habe es erst mit tk.Text() probiert, aber es wurde nichts angezeigt.
Code: Alles auswählen
import random
import tkinter as tk
def generate_number():
return random.randint(1, 9)
def main():
root = tk.Tk()
canvas = tk.Canvas(root, height=1000, width=1600,background='gray75')
text = canvas.create_text(400,800, text=str(generate_number()))
canvas.pack()
number_display = tk.Text(root,height=400,width=800)
number_display.pack()
number_display.insert(tk.END, str(generate_number()))
root.mainloop()
if __name__ == "__main__":
main()
Re: Hilfe beim Implementieren eines Tests
Verfasst: Montag 12. Februar 2024, 10:48
von Sirius3
Warum hast Du jetzt auch noch tk.Text? Das ist doch ein Eingabefeld.
Benutze ein Canvas, so wie Du es schon machst, und da wird schon an der Position 400/800 eine Zahl angezeigt.
Re: Hilfe beim Implementieren eines Tests
Verfasst: Montag 12. Februar 2024, 11:06
von __blackjack__
@dvdllyyy: Ich kann nicht nachvollziehen das beim vorletzten Versuch nichts sichtbar sein soll. Da wird bei mir an der angegebenen Position eine Ziffer angezeigt.
`number_display` macht nicht so wirklich Sinn, vor allem nicht das da eine *andere* Zahl ausgewürfelt wird als die auf dem Canvas (wenn man die Funktion aufrufen würde).
Für das fernere Ziel das im ersten Beitrag beschrieben ist, würde ich den Text auf dem Canvas auch erst einmal leer erstellen und Zufallsposition, -grösse, und Ziffer in einem extra Schritt konfigurieren, denn diesen Schritt muss man ja mehrfach wiederholen. Da wäre das praktischer das in einer eigenen Funktion zu haben.
Bei nicht-trivialen GUI-Programmen muss man die Sprache bis hin zur objektorientierten Programmierung (OOP) können. Also eigene Klassen entwerfen können. Spätestens wenn man nur unter bestimmten Bedingungen auf den Druck der Leertaste reagieren will, braucht man das, weil man sich dann Zustände über Rückrufe hinweg merken und verändern muss. Und das mit den Klassen würde ich empfehlen erst einmal ohne GUI zu lernen, sonst kommt mit GUIs noch die ereignisbasierte Programmierung extra dazu.
Re: Hilfe beim Implementieren eines Tests
Verfasst: Montag 12. Februar 2024, 12:48
von dvdllyyy
Also bei mir wird nur ein graues fenster angezeigt, egal ob ich canvas.pack() oder auch number_display.pack() ausführe. Ich denke ich lasse es besser bleiben.
Re: Hilfe beim Implementieren eines Tests
Verfasst: Montag 12. Februar 2024, 13:20
von __deets__
Ich bekomme auch ein graues und sehr grosses(!) Fenster, was dank 4K-Monitor aber ok geht. Und irgendwo links unten eine kleine Zahl. Mit genau dem Code oben, weniger dem ueberfluessigen number_display.
Re: Hilfe beim Implementieren eines Tests
Verfasst: Montag 12. Februar 2024, 13:42
von dvdllyyy
Ich weiß nicht wie man Bilder hier einfügt, aber ich kriege ein graues Fenster ohne Zahl in der Ecke.
Hier ist der code:
Code: Alles auswählen
import random
import tkinter as tk
def generate_number():
return random.randint(1, 9)
def main():
root = tk.Tk()
canvas = tk.Canvas(root, height=1000, width=1600,background='gray75')
text = canvas.create_text(400,800, text=str(generate_number()))
canvas.pack()
root.mainloop()
if __name__ == "__main__":
main()
Re: Hilfe beim Implementieren eines Tests
Verfasst: Montag 12. Februar 2024, 13:47
von __deets__
Bilder auf imgur hochladen & mit der "Get share links"-Option einen Forums-Link erzeugen. Und so sieht das dann aus, genau dein Programm:
