also ich muss ein GUI für ein einfaches schere-stein-papier entwickeln (mit den folgenden bildern: https://de.wikinews.org/wiki/Datei:SssSchere.jpg https://de.wikinews.org/wiki/Datei:SssStein.jpg und https://de.wikinews.org/wiki/Datei:SssPapier.jpg). habe folgendes: jedoch bekomme ich nur fehler angezeigt... hilft mir bitte
from tkinter import *
from random import randint
# Ereignisverarbeitung
def buttonSchereSteinPapier():
# Verwaltung und Verarbeitung der Daten
augen = randint(1,3)
# Anzeige der Daten
labelSchereSteinPapier.config(image=imageListe[augen-1])
# Erzeugung des Fensters
tkFenster = Tk()
tkFenster.title('Schere Stein Papier')
tkFenster.geometry('312x240')
# Bilder
imageListe = [
PhotoImage(file='schere.gif'),
PhotoImage(file='stein.gif'),
PhotoImage(file='papier.gif'),
]
imageHintergrund = PhotoImage(file='spieltisch.gif')
# Canvas für den Hintergrund
canvasHintergrund = Canvas(master=tkFenster)
canvasHintergrund.place(x=0, y=0, width=312, height=240)
canvasHintergrund.create_image(0, 0, image=imageHintergrund, anchor='nw')
# Label
labelSchereSteinPapier = Label(master=canvasHintergrund, image=imageListe[0])
labelSchereSteinPapier.place(x=140, y=100, width=30, height=30)
# Button zum Würfeln
buttonSchereSteinPapier = Button(master=canvasHintergrund, text='würfeln', command=buttonWuerfelnClick)
buttonSchereSteinPapier.place(x=10, y=210, width=100, height=20)
# Aktivierung des Fensters
tkFenster.mainloop()
Spiel entwickeln
Wenn Du Fehler bekommst, wäre es gut, wenn Du auch die komplette Fehlermeldung posten würdest. Sonst muß man raten, was denn nun falsch ist.
*-Importe sind schlecht, weil man damit unkontrolliert hunderte Namen in den eigenen Namensraum schaufelt. Tkinter wird üblicherweise via `import tkinter as tk` importiert.
Variablennamen und Funktionen werden nach Konvention komplett klein geschrieben. Typen haben in Namen nichts verloren, also images statt imageListe.
Man benutzt kein place, sondern plaziert Widgets mit pack oder grid, je nach dem, was man erreichen will.
Alles was eine Funktion braucht, muß sie auch über ihre Argumente bekommen.
Alles ab #Erzeugung des Fensters muß auch in eine Funktion wandern, die üblicherweise main genannt wird. Dann hat man erst gar nicht das Problem, dass man aus Versehen globale Variablen benutzt.
Wenn Du den Fehler meinst, dass buttonWuerfelnClick nicht definiert ist. Die Lösung ist ja trivial.
*-Importe sind schlecht, weil man damit unkontrolliert hunderte Namen in den eigenen Namensraum schaufelt. Tkinter wird üblicherweise via `import tkinter as tk` importiert.
Variablennamen und Funktionen werden nach Konvention komplett klein geschrieben. Typen haben in Namen nichts verloren, also images statt imageListe.
Man benutzt kein place, sondern plaziert Widgets mit pack oder grid, je nach dem, was man erreichen will.
Alles was eine Funktion braucht, muß sie auch über ihre Argumente bekommen.
Alles ab #Erzeugung des Fensters muß auch in eine Funktion wandern, die üblicherweise main genannt wird. Dann hat man erst gar nicht das Problem, dass man aus Versehen globale Variablen benutzt.
Wenn Du den Fehler meinst, dass buttonWuerfelnClick nicht definiert ist. Die Lösung ist ja trivial.
-
- User
- Beiträge: 38
- Registriert: Donnerstag 4. Juni 2020, 20:55
Sirius3 hat geschrieben: Donnerstag 25. Februar 2021, 17:22 Wenn Du Fehler bekommst, wäre es gut, wenn Du auch die komplette Fehlermeldung posten würdest. Sonst muß man raten, was denn nun falsch ist.
*-Importe sind schlecht, weil man damit unkontrolliert hunderte Namen in den eigenen Namensraum schaufelt. Tkinter wird üblicherweise via `import tkinter as tk` importiert.
Variablennamen und Funktionen werden nach Konvention komplett klein geschrieben. Typen haben in Namen nichts verloren, also images statt imageListe.
Man benutzt kein place, sondern plaziert Widgets mit pack oder grid, je nach dem, was man erreichen will.
Alles was eine Funktion braucht, muß sie auch über ihre Argumente bekommen.
Alles ab #Erzeugung des Fensters muß auch in eine Funktion wandern, die üblicherweise main genannt wird. Dann hat man erst gar nicht das Problem, dass man aus Versehen globale Variablen benutzt.
Wenn Du den Fehler meinst, dass buttonWuerfelnClick nicht definiert ist. Die Lösung ist ja trivial.
also jetzt habe ich das hier:
from tkinter import *
from random import randint
# Ereignisverarbeitung
def buttonSchereSteinPapier():
# Verwaltung und Verarbeitung der Daten
augen = randint(1,3)
# Anzeige der Daten
if augen == 1:
labelSchere.config(image=imageSchere)
elif augen == 2:
labelStein.config(image=imageStein)
elif augen == 3:
labelPapier.config(image=imagePapier)
# Erzeugung des Fensters
tkFenster = Tk()
tkFenster.title('Test')
tkFenster.geometry('120x110')
# Bilder
imageSchere = PhotoImage(file='schere.gif')
imageStein = PhotoImage(file='stein.gif')
imagePapier = PhotoImage(file='papier.gif')
# Label Würfel mit Bild
tkFenster.mainloop()
Der fehler wird nicht konret angezeigt, es öffnet sich einfach ein blauer fenster, sonst nichts
-
- User
- Beiträge: 38
- Registriert: Donnerstag 4. Juni 2020, 20:55
Sirius3 hat geschrieben: Donnerstag 25. Februar 2021, 23:10 Warum hast Du jetzt diesen Code?
Warum hast Du etwas geändert?
Was erwartest Du, tut der Code?
weil der irgendwie mehr sinn macht und ein klassenkamerad meinte, dass der vorherige code nicht gebrauchbar sei, oder etwa nicht? ja natürlich erwarte ich, dass der im besten fall funktioniert
-
- User
- Beiträge: 38
- Registriert: Donnerstag 4. Juni 2020, 20:55
Sirius3 hat geschrieben: Donnerstag 25. Februar 2021, 23:24 Aber was bedeutet "funktioniert"?
Also der erste Code war deutlich näher an irgendeiner Funktion als der zweite. Aber so eine Funktion mußt Du schon programmieren. Hoffen hilft nicht.
Ich bin überhaupt nicht gut in programmieren.. würde ich das können, würde ich nicht fragen... ich bin wirklich aufgeschmissen...
Wir lösen hier keine Hausaufgaben für dich. Das ist hier vielfach prominent beschrieben, zb hier: viewtopic.php?f=1&t=1689
Wir versuchen dir zu helfen, deine konkreten Probleme zu lösen, und dein Verständnis zu entwickeln. Nicht aus dem Netz gepulten Code für dich zu reparieren.
Wir versuchen dir zu helfen, deine konkreten Probleme zu lösen, und dein Verständnis zu entwickeln. Nicht aus dem Netz gepulten Code für dich zu reparieren.
-
- User
- Beiträge: 38
- Registriert: Donnerstag 4. Juni 2020, 20:55
__deets__ hat geschrieben: Freitag 26. Februar 2021, 09:07 Wir lösen hier keine Hausaufgaben für dich. Das ist hier vielfach prominent beschrieben, zb hier: viewtopic.php?f=1&t=1689
Wir versuchen dir zu helfen, deine konkreten Probleme zu lösen, und dein Verständnis zu entwickeln. Nicht aus dem Netz gepulten Code für dich zu reparieren.
Ich versuche es ja so zu ändern, damit es klappt. Ich kann einfach nun mal kein info. Denke du bist auch nicht in allem ein intelligentzbestie... bin ja bereit zu lernen, so ist das jetzt nicht.. habe ja gefragt... und nicht nach einem fertigen code gefragt....
Du schreibst nur, dass Dein Code einen Fehler hat, kannst aber nicht genau sagen, welcher Fehler das ist.
Wenn ich Deinen Code anschaue, dann ist da kein Fehler, sondern die eigentliche Funktionalität wurde nicht programmiert. Bisher wird nur ein Fenster aufgemacht - mehr nicht.
Und da macht Dein erster Code deutlich mehr, wenn man den trivialen Fehler behebt.
Wenn Dir das Programmieren einer GUI noch zu schwierig ist, dann fang doch mit einem Text-basierten Stein-Schere-Papier an. Dort kannst Du das Schreiben von Programmen viel einfacher lernen, weil Du Dich auf die Logik konzentrieren kannst und Dich nicht mit ereignisbasiertem Programmablauf rumschlagen mußt.
Wenn ich Deinen Code anschaue, dann ist da kein Fehler, sondern die eigentliche Funktionalität wurde nicht programmiert. Bisher wird nur ein Fenster aufgemacht - mehr nicht.
Und da macht Dein erster Code deutlich mehr, wenn man den trivialen Fehler behebt.
Wenn Dir das Programmieren einer GUI noch zu schwierig ist, dann fang doch mit einem Text-basierten Stein-Schere-Papier an. Dort kannst Du das Schreiben von Programmen viel einfacher lernen, weil Du Dich auf die Logik konzentrieren kannst und Dich nicht mit ereignisbasiertem Programmablauf rumschlagen mußt.
-
- User
- Beiträge: 38
- Registriert: Donnerstag 4. Juni 2020, 20:55
das ist aber nicht der arbeitsauftrag, ich muss die bilder miteinbinden... freiwillig, so als hobby oder so würde ich info nie machen, weil ich es eben nicht kann. wie denn auch?- mein leher sagt einfach ,,macht dies macht das" und das, ohne irgendetwas zu erklären...Sirius3 hat geschrieben: Freitag 26. Februar 2021, 10:56 Du schreibst nur, dass Dein Code einen Fehler hat, kannst aber nicht genau sagen, welcher Fehler das ist.
Wenn ich Deinen Code anschaue, dann ist da kein Fehler, sondern die eigentliche Funktionalität wurde nicht programmiert. Bisher wird nur ein Fenster aufgemacht - mehr nicht.
Und da macht Dein erster Code deutlich mehr, wenn man den trivialen Fehler behebt.
Wenn Dir das Programmieren einer GUI noch zu schwierig ist, dann fang doch mit einem Text-basierten Stein-Schere-Papier an. Dort kannst Du das Schreiben von Programmen viel einfacher lernen, weil Du Dich auf die Logik konzentrieren kannst und Dich nicht mit ereignisbasiertem Programmablauf rumschlagen mußt.
Natuerlich kann ich nicht alles. Ich erwarte aber auch nicht von denjenigen, die es koennen, das sie meine Hausaufgaben machen. Ich frage sie, warum Dinge sind wie sie sind, und versuche damit zielgerichteter zu lernen, weil ich statt Ochs vorm Berg zu sein einen Weg aufzeigt bekomme. Den ICH gehen muss. Nicht jemand anderes fuer mich.Pineapple.x16 hat geschrieben: Freitag 26. Februar 2021, 10:40 Ich versuche es ja so zu ändern, damit es klappt. Ich kann einfach nun mal kein info. Denke du bist auch nicht in allem ein intelligentzbestie... bin ja bereit zu lernen, so ist das jetzt nicht.. habe ja gefragt... und nicht nach einem fertigen code gefragt....
Dir sind klare Hinweise gegeben worden, welcher Code besser ist, und wie du ihn hier praesentieren solltest, damit wir dir besser helfen koennen. Sehe ich bisher nichts von. Was ich sehe, ist Jammerei. Hilft die?
-
- User
- Beiträge: 38
- Registriert: Donnerstag 4. Juni 2020, 20:55
das sollte kein jammern sein.. ich weiß jetzt, dass ich die obere holen soll. Aber welche zeile soll ich zb verändern?__deets__ hat geschrieben: Freitag 26. Februar 2021, 12:12Natuerlich kann ich nicht alles. Ich erwarte aber auch nicht von denjenigen, die es koennen, das sie meine Hausaufgaben machen. Ich frage sie, warum Dinge sind wie sie sind, und versuche damit zielgerichteter zu lernen, weil ich statt Ochs vorm Berg zu sein einen Weg aufzeigt bekomme. Den ICH gehen muss. Nicht jemand anderes fuer mich.Pineapple.x16 hat geschrieben: Freitag 26. Februar 2021, 10:40 Ich versuche es ja so zu ändern, damit es klappt. Ich kann einfach nun mal kein info. Denke du bist auch nicht in allem ein intelligentzbestie... bin ja bereit zu lernen, so ist das jetzt nicht.. habe ja gefragt... und nicht nach einem fertigen code gefragt....
Dir sind klare Hinweise gegeben worden, welcher Code besser ist, und wie du ihn hier praesentieren solltest, damit wir dir besser helfen koennen. Sehe ich bisher nichts von. Was ich sehe, ist Jammerei. Hilft die?
Ich weiss nicht, was es sein *sollte*. Es *ist* Jammern. Und bitte nicht immer den Post direkt davor nochmal komplett zitieren. Der steht da schon.
Der Code den du verwenden willst, gehoert in code-Tags. Das ist der </>-Knopf im vollstaendigen Editor. Die Fehlermeldung, die du bekommst, gehoert auch in Code tags. Wie sieht die aus? Dann sind dir eine ganze Reihe von Hinweisen zu dem Code gegeben. Was ist mit denen, hast du probiert die einzuarbeiten? Der Hinweis darauf, was falsch gelaufen ist, wurde auch gegeben.
Uebrigens ist hier die Quelle deines Codes: https://www.inf-schule.de/software/gui/ ... ter/bilder
Warum benutzt du den nicht, und aenderst ihn *schritt fuer schritt* ab?
Der Code den du verwenden willst, gehoert in code-Tags. Das ist der </>-Knopf im vollstaendigen Editor. Die Fehlermeldung, die du bekommst, gehoert auch in Code tags. Wie sieht die aus? Dann sind dir eine ganze Reihe von Hinweisen zu dem Code gegeben. Was ist mit denen, hast du probiert die einzuarbeiten? Der Hinweis darauf, was falsch gelaufen ist, wurde auch gegeben.
Uebrigens ist hier die Quelle deines Codes: https://www.inf-schule.de/software/gui/ ... ter/bilder
Warum benutzt du den nicht, und aenderst ihn *schritt fuer schritt* ab?
-
- User
- Beiträge: 38
- Registriert: Donnerstag 4. Juni 2020, 20:55
@_deets_
es kommt dieser fehler
Traceback (most recent call last):
File "C:/Users/Anna/Documents/Informatik/test test test.py", line 17, in <module>
PhotoImage(file='schere.gif'),
File "C:\Users\Anna\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 4063, in __init__
Image.__init__(self, 'photo', name, cnf, master, **kw)
File "C:\Users\Anna\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 4008, in __init__
self.tk.call(('image', 'create', imgtype, name,) + options)
_tkinter.TclError: couldn't open "schere.gif": no such file or directory
es kommt dieser fehler
Traceback (most recent call last):
File "C:/Users/Anna/Documents/Informatik/test test test.py", line 17, in <module>
PhotoImage(file='schere.gif'),
File "C:\Users\Anna\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 4063, in __init__
Image.__init__(self, 'photo', name, cnf, master, **kw)
File "C:\Users\Anna\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 4008, in __init__
self.tk.call(('image', 'create', imgtype, name,) + options)
_tkinter.TclError: couldn't open "schere.gif": no such file or directory
Das liegt daran, dass du den Pfad zu dem Bild komplett angeben musst. Wenn das Bild schere.gif im gleichen Ordner wie zum test test test.py (schlechter Name) liegt, dann waere das C:/Users/Anna/Documents/Informatik/schere.gif. Gleiches gilt natuerlich fuer alle anderen Bilder.
Und nochmal: Quelltext und Fehler gehoeren in code-Tags, damit man sie besser bzw. ueberhaupt im Fall von Python lesen kann. Das ist der </>-Knopf im vollstaendigen Editor.
Und nochmal: Quelltext und Fehler gehoeren in code-Tags, damit man sie besser bzw. ueberhaupt im Fall von Python lesen kann. Das ist der </>-Knopf im vollstaendigen Editor.
-
- User
- Beiträge: 38
- Registriert: Donnerstag 4. Juni 2020, 20:55
also eigentlcih habe ich das gleich abgespeichert . das müsste dann normalerweise klappen , oder?
Nein, das muss es eben nicht. Tut es ja auch nicht, oder? Ein relativer Pfad wie schere.gif wird NICHT relativ zu dem umgebenden Skript aufgeloest. Sondern relativ zum sogennanten Arbeitsverzeichnis. Und das kann sonstewo stehen. Wenn du zB sowas machst:
cd c:\users\anna\schiffsschaukel
und dann dein Programm aufrufst, dann will Python (bzw das Betriebssystem)
c:\user\anna\schiffschaukel\schere.gif
laden. Da liegt das Bild aber nicht.
Darum muss man den Pfad (fuer jetzt) komplett angeben. Spaeter kann man das mittels der pathlib-Bibliothek und der Variable __file__ auch anders hinbekommen, aber erst muss das mal laufen.
cd c:\users\anna\schiffsschaukel
und dann dein Programm aufrufst, dann will Python (bzw das Betriebssystem)
c:\user\anna\schiffschaukel\schere.gif
laden. Da liegt das Bild aber nicht.
Darum muss man den Pfad (fuer jetzt) komplett angeben. Spaeter kann man das mittels der pathlib-Bibliothek und der Variable __file__ auch anders hinbekommen, aber erst muss das mal laufen.
-
- User
- Beiträge: 38
- Registriert: Donnerstag 4. Juni 2020, 20:55
und wo kann man den kompletten namen herausfinden? bei mir steht unter dem bildinfo nur ,,schere.gif"
Hallo,
rechts Maustaste auf das Bild -> Eigenschaften und da steht irgendwo in dem sich öffnenden Fenster 'Pfad:' Oder du hast den Ordner offen in dem deine Bilder liegen. Dann gibt es oben die Leiste mit "Datei", "Bearbeiten" und so weiter. Darunter kommen unterschiedliche Symbole und darunter ist relativ mittig ein DropDown-Menü in dem der jetztige Ordner und die Überordner stehen. Fahre mit der Maus darüber, so das sich der Zeiger in deinen Coursor, wie du es aus Word kennst, verwandelt. Dann ein einfacher Links-Klick und der Ordner-Pfad wird dir angezeigt. Denn kannst du dann kopieren und dein gewünschtes Bild entsprechend hinzufügen.
Am einfachsten wäre es, wenn du die Bilder in den Ordner ablegst, in dem dein Skript liegt. Den Pfad hat @__deets__ freundlicherweise schon herausgeschrieben, dann musst du den nur kopieren.
Grüße
Dennis
rechts Maustaste auf das Bild -> Eigenschaften und da steht irgendwo in dem sich öffnenden Fenster 'Pfad:' Oder du hast den Ordner offen in dem deine Bilder liegen. Dann gibt es oben die Leiste mit "Datei", "Bearbeiten" und so weiter. Darunter kommen unterschiedliche Symbole und darunter ist relativ mittig ein DropDown-Menü in dem der jetztige Ordner und die Überordner stehen. Fahre mit der Maus darüber, so das sich der Zeiger in deinen Coursor, wie du es aus Word kennst, verwandelt. Dann ein einfacher Links-Klick und der Ordner-Pfad wird dir angezeigt. Denn kannst du dann kopieren und dein gewünschtes Bild entsprechend hinzufügen.
Am einfachsten wäre es, wenn du die Bilder in den Ordner ablegst, in dem dein Skript liegt. Den Pfad hat @__deets__ freundlicherweise schon herausgeschrieben, dann musst du den nur kopieren.
Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]