Graphiken im Python Code verlinken? Wie geht das?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
M&M's_Knabberer
User
Beiträge: 34
Registriert: Sonntag 27. September 2015, 17:05

Hallo, bin noch Anfänger im Programmieren..
was ich bisher verstanden habe, sind Funktionen erstellen und If/else Anweisungen..
Nun möchte ich damit soein wenig herumbasteln und dazu fehlt mir ein Befehl um irgendeine Graphik einzublenden.
Gibt es dafür irgendein Befehl?
Ich meine halt so richtung, das man ein paar Bilder im Code verankert um soeine kleine Animation zu erstellen.
Und ein Hintergrundbild etc..
Ich konnte im Internet nicht viel finden auch in meinem Lernbuch fand ich über graphiken nichts.
Ausser Turtleimport.. aber das ist nicht das was ich meine.. ich meine eher so, man könnte zb unter Paint etwas malen und das dann im Pyton code verlinken etc..?
Wäre echt nett wenn mir jemand weiterhelfen könnte :)
Vielen Dank

*Anmerkung ich verwende Python 2.7..
BlackJack

@M&M's_Knabberer: Man kann in `Tkinter` Bilder anzeigen. Von Haus aus eher wenig und alte Formate wie GIF, aber mit dem PIL- oder Pillow-Package lassen sich alle gängigen Formate laden und in `Tkinter` verwenden.

Wenn es weniger klassische GUI sein soll und mehr in Richtung Spiel, kannst Du Dir mal Pygame anschauen.
M&M's_Knabberer
User
Beiträge: 34
Registriert: Sonntag 27. September 2015, 17:05

Hallo BlackJack,
danke für die Antwort.
Kannst du mir ein Beispiel geben wie ich ein Bild in den Code laden kann?
zb:

Code: Alles auswählen

def funktion1()
passwort = raw_input('gib das Passwort ein: ')
if (passwort = 'Eintritt'):
             print 'richtiges Passwort'
             # Hier könnte jetz ein Bild ausgegeben werden von irgendeinem Ordner geladen etc..
else: 
    print 'falsches Passwort'
    funktion1()  

funktion1()
Zuletzt geändert von Hyperion am Sonntag 27. September 2015, 17:58, insgesamt 1-mal geändert.
Grund: Code in Code Tags gesetzt
BlackJack

@M&M's_Knabberer: Das kompiliert nicht weil das Syntaxfehler enthalten sind. Du möchtest auch die Funktion hier nicht sich selbst aufrufen lassen. Rekursion ist kein Ersatz für einfache Schleifen in einer Programmiersprache die a) keine „tail call optimization“ garantiert (tun die wenigsten nicht-funktionalen Programmiersprachen) und die b) wie Python ein relativ kleines Rekursionslimit in der Standardimplementierung hat. Man würde hier eine ”Endlosschleife” mit ``while True:`` schreiben und die dann mit ``break`` verlassen wenn die entsprechende Bedingung eingetreten ist.

Der Name der Funktion ist sehr schlecht. Zum einen sagt der Name rein gar nichts darüber aus was die Funktion tut und dann ist da diese komische 1 am Ende. Warum? Solltest Du anfangen Namen mit angehängten Nummern zu versehen dann machst Du fast sicher etwas falsch. Entweder weil Du zu faul bist Dir vernünftige Namen auszudenken, oder weil das eigentlich keine einzelnen Namen sein sollten sondern die Werte in einer Datenstruktur zusammengefasst werden sollten. Oft in einer Liste.

Um den Ausdruck bei ``if`` gehören keine Klammern und ``=`` ist *nicht* der Vegleichsoperator. Das ist an der Stelle sogar einer der Syntaxfehler, weil Python in Audrücken keine Zuweisungen erlaubt. Es gibt Programmiersprachen da geht das, da ist dann aber auch genau dieser Fall eine böse Falle weil der Compiler das so akzeptiert, das aber etwas anderes bedeutet als Du dachtest.

Bevor Du Bilder anzeigst, solltest Du diese Grundlagen drauf haben und das ohne Bildanzeige erst einmal zum Laufen bringen.

Womit möchtest Du das Bild denn dann anzeigen? `Tkinter` oder PyGame? Was ist denn das eigentliche Ziel dieser Aktion, also was muss das verwendete Rahmenwerk noch leisten können? Und wie gut sitzen die Grundlagen von Python? Denn mindestens bei klassischer GUI-Programmierung, also zum Beispiel `Tkinter`, kommt man bei jeder nicht-trivialen Sache nicht wirklich ohne objektorientierte Programmierung aus (OOP), also selber Klassen entwerfen und implementieren. Bei PyGame kann man diese Grenze wohl noch ein bisschen weiter hinaus schieben, aber auch da wird man schnell sinnvollerweise eigene Datentypen von `pygame.Sprite` ableiten wollen.
M&M's_Knabberer
User
Beiträge: 34
Registriert: Sonntag 27. September 2015, 17:05

Naja mein Ziel ist es ein einfaches Point und Click Adventure zu schreiben..

Aber das ist noch in weiter ferne.
Sehr weiter^^

Ich programmiere erst seid sehr kurzer Zeit.
Und was ich bisher kann ist im Grunde nur Funktionen definieren und if Befehle.
Mit Schleifen hab ich mich noch garnicht befasst bisher.
Daher hab ich die funktionsanweisung mit in den Elseblock geschrieben. Bei mir funktioniert das.^^ :K

Naja und ich hab halt grosses Interresse mal ein ein paar Bilder mit einzufügen.
Das macht dann mehr spaß.

Muss man die Tkinter vorlagen dazu nutzen? Wie würde denn der Befehl lauten wenn man ein bild zb 'Bild.jpeg' aus Ordner 'XYZ'
einfügen wollte?

Und wäre das auch ohne Tkinter/Pygame möglich?
BlackJack

@M&M's_Knabberer: Das würde sowohl mit `Tkinter` (und `PIL` oder Pillow zum laden von ”moderneren” Grafikformaten) gehen, also auch mit PyGame. Bei Tkinter würde sich das `Canvas`-Widget anbieten um verschiedene Grafilen darauf zu kombinieren.

Für beides muss man die Grundlagen von Python drauf haben. Ohne Schleifen zu kennen/können macht es wirklich keinen Sinn sich mit Grafik zu beschäftigen. Das würde ich hintenanstellen bis die Sprachgrundlagen bis einschliesslich OOP und grundlegende Datentypen verstanden sind.

Das mit dem rekursiven Funktionsaufruf ”funktioniert”, aber halt nicht unbegrenzt. Damit wird man früher oder später in einen Programmabsturz laufen. Gewöhn Dir das also gar nicht erst an statt einfacher Schleifen rekursive Funktionsaufrufe zu verwenden.

Was sind „Tkinter-Vorlagen“? Und das wäre nicht ein ”Befehl”, sondern man müsste mindestens mal das Hauptfenster erstellen und ein `Label`-Objekt, und ein `PhotoImage` und das dann auf dem Label darstellen und das Label im Hauptfenster darstellen. Und zuguterletzt dann die Tk-Hauptschleife aufrufen, womit es dann mit dem (wenigen) was Du an Programmflusssteuerung weisst, aus ist, denn GUI-Programmierung funktioniert ereignisbasiert. Man gibt die Kontrolle an das GUI-Rahmenwerk ab und reagiert dann nur noch auf Ereignisse bei denen man sich registriert hat und für die das Rahmenwerk dann Funktionen beziehungsweise Methoden die man geschrieben hat aufruft.

Klar geht das auch ohne `Tkinter` oder PyGame. Es gibt auch noch andere GUI-Rahmenwerke (Qt, Gtk, wxWidgets, …) und Spielebibliotheken (Pyglet, ein paar 3D-Engines, …).
BlackJack

Anzeigen einer GIF-Datei mit `Tkinter`. Aber alles andere als Anzeigen und warten bis der Benutzer das Fenster geschlossen hat, wird schnell deutlich komplexer.

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf8
from __future__ import absolute_import, division, print_function
import Tkinter as tk


def main():
    root = tk.Tk()
    image = tk.PhotoImage(file='test.gif')
    tk.Label(root, image=image).pack()
    root.mainloop()

 
if __name__ == '__main__':
    main()
M&M's_Knabberer
User
Beiträge: 34
Registriert: Sonntag 27. September 2015, 17:05

Bei dem Code zeigt Python bei mir ne fehlermeldung, gleich in der ersten Zeile from ... import
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Welche?
M&M's_Knabberer
User
Beiträge: 34
Registriert: Sonntag 27. September 2015, 17:05

Jetzt funktionierts Yuhuu :D
war glaub ich bei mir irgendwas falsch eingerückt..

Ich hab heut Abend bisschen rumprobiert wie das Programm der Passwort abfrage denn funktionieren würde, mit einer Schleife, aber ich hab nicht so recht ne Ahnung wie man die Schleife in den Code einfügt. Gibt dauernt nur Fehlermeldungen.

Code: Alles auswählen

def frage():
   
    eingabe = raw_input('eingeben' )
    if (eingabe == 'j'):
        print 'cool'
        
    else:
        print 'shit'
        while frage()

frage()
???
Zuletzt geändert von Anonymous am Dienstag 29. September 2015, 00:31, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

M&M's_Knabberer hat geschrieben:Jetzt funktionierts Yuhuu :D
aber ich hab nicht so recht ne Ahnung wie man die Schleife in den Code einfügt. Gibt dauernt nur Fehlermeldungen.
Welches Lernbuch benutzt du denn?

PS: Wenn du deinen Code hier zeigen willst (gute Idee!) dann klick mal oben auf den "Code" Button, dann sieht er besser aus :mrgreen:
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
BlackJack

@M&M's_Knabberer: Wie bist Du denn auf die Idee gekommen das *so* zu schreiben mit dem ``while``? Sich Syntax zusammenraten funktioniert nicht wirklich, Du musst halt nachlesen wie Schleifen funktionieren und auch wie die Syntax dafür aussieht. Im Python-Tutorial in der Python-Dokumentation wird die ``while``-Schleife übrigens so ziemlich als erstes nach den Grunddatentypen und wie man die Python-Shell als ”Taschenrechner” verwenden kann, behandelt. Der Abschnitt heisst „First Steps Towards Programming“.
M&M's_Knabberer
User
Beiträge: 34
Registriert: Sonntag 27. September 2015, 17:05

Was für ein Tutorial meint ihr denn?
Ich lerne mit zwei verschiedenen Büchern "Einstieg in Python" wobei ich dabei auf die Python 2.7 version lerne und das Buch "Programmieren Supereasy" eigentlich für Kinder aber damit hab ich das eine oder andere leichter verstanden.

Es hilft mir zu verstehen, indem ich selber mir selber kleine Programme ausdenke in denen ich die neu gelernten Codebefehle einbaue.
Ich übnicht so eins nach dem anderen wie im Buch, dadurch würd ich den Spaß dran verliehren und vielleicht nicht alles später auswendig können bzw logisch nachfolyogen haben.

Also als nächstes wollt ich mir mal diese Graphischen Benutzeroberlächen genauer ansehen und studieren Tkinter. In dem einen Buch ist viel über Turtelgraphic beschrieben, aber ich hätte es halt einfacher gefunden, einfach Bilder einzufügen und zu Animationen zusammenzustellen, wie zb in HTML möglich. Weil mit der Turtelfunktion muss man alles so kompliziert eingeben um die simplesten Formen dazustellen.

Ja danach wollt ich wenn ich das soweit hab, dann mich den Tastaturbefehlen zuwenden und verstehen wie man eine graphic dann steuern kann auf dem erstellten Screen.
Und anschließend dann das erste eigene Spiel versuchen. :)
Das ist mein großes Ziel, wenn ich das geschafft hab, werd ich mich vermutlich des Lebens freuen und endlich total kreativ spiele entwerfen yuhuu^^
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

M&M's_Knabberer hat geschrieben:Also als nächstes wollt ich mir mal diese Graphischen Benutzeroberlächen genauer ansehen und studieren Tkinter.
Bevor du mit grafischen Benutzeroberflächen anfängst solltest du aber zumindest die absoluten Grundlagen von Python beherrschen und dazu gehören definitiv auch while-Schleifen.
BlackJack

@M&M's_Knabberer: Das Tutorial in der Python-Dokumentation ist doch eine ziemlich eindeutige Beschreibung welches Tutorial ich meine. Halt in *der* Python-Dokumentation *das* Tutorial. Also da wo auf der Übersichtsseite der Dokumentation der Link „Tutorial“ mit dem beschreibenden Text „start here“ steht.

Wie gesagt: Für GUI-Programmierung muss man letztlich OOP können, und das sollte man wenn man nicht wirklich viel auf einmal lernen möchte, am besten vorher schon verstanden haben, denn bei GUIs kommt neben einem üblicherweise etwas komplexerem Rahmenwerk noch die ereignisorientierte Programmierung als zusätzliches Thema hinzu. Und Schleifen kommem üblicherweise auch vor Funktionen was das lernen angeht. (Also zumindest bei nicht-funktionalen Programmiersprachen ;-))
M&M's_Knabberer
User
Beiträge: 34
Registriert: Sonntag 27. September 2015, 17:05

hi
ich finde mich nicht zurecht mit dem Tutorial..
ich hab immernoch nicht rausgefunden wie ich jetz in mein Beispielprogramm eine for oder while Schleife einbauen kann um die Passwort abfrage zu wiederholen..?

Code: Alles auswählen

def antwort():
    x = 1
while x == (1):
    print('ruhig')
    x = raw_input('gut?' )
print('toll')

passwort = raw_input('gibs ein passwort: ')
if passwort == ('passwort'):
    antwort()
else:
    print 'falsch'

antwort()
verstehe das nicht und finde irgendwie nichts zum Thema schleifen was es mir erklähren würde :(
Zuletzt geändert von Anonymous am Samstag 3. Oktober 2015, 21:10, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@M&M's_Knabberer: Das Einrückung wichtiger Bestandteil der Sprache ist, sollte eigentlich jedes Tutorial behandeln. Das was Du da geschrieben hast macht nicht den Eindruck als wenn Du auch nur *irgendwas* *verstanden* hättest was den Programmfluss von Python angeht. Schreibst Du nur ab und probierst wild herum? So funktioniert Python nicht.

Das was wiederholt werden soll muss im Schleifenkörper stehen, also entsprechend eingerückt sein damit es zu der Schleife gehört.

Bei dem gezeigten Quelltext hast Du das ja noch nicht einmal für die Funktion richtig gemacht. Du hast nicht Funktionen vor Schleifen gelernt, sondern auch Funktionen nicht verstanden.
M&M's_Knabberer
User
Beiträge: 34
Registriert: Sonntag 27. September 2015, 17:05

Code: Alles auswählen

def passwortabfrage():
    a = 1
    while a:
        eingabe = raw_input('gib Passwort: ')
        if eingabe == 'passwort':
            print 'richtig'
        else:
            print 'falsch'



passwortabfrage()
Jetz hab ich es verstanden :D
Danke für die Hilfe!!
BlackJack

@M&M's_Knabberer: Statt 1 (und 0) sollte man `True` (und `False`) verwenden wenn man die beiden Zustände „Wahr“ und „Falsch“ ausdrücken möchte. Und `a` ist hier überflüssig, man kann auch gleich ``while True:`` schreiben.
M&M's_Knabberer
User
Beiträge: 34
Registriert: Sonntag 27. September 2015, 17:05

Ok hab ich mal abgeändert.. und mir hinter die Löffel verzeichnet.

Und wie kann ich dann die Schleife beenden?

------
hab das mit break jetz selbst gelöst^^
--------

und nochmal ne klitzekleine Frage.. benötigt man für Spiele eigentlich diese int() und float() befehle und sonstige Zahlenumwandlungsbefehle?
:K

In meinem Buch kommen ziehmlich viele Zahlensachen dran.. die mich nicht so sonderlich sehr interessieren.
Dann noch Listen.. Weiß auch nicht so recht wofür ich sowas benötigen werde, naja.
Und dann kommt halt Tkinter, danach Internet anwendungen etc..

Ich hab bisschen auf Seiten wegen Pygame geschaut, aber da vieles auf Englisch ist verstehe ich nicht alles zu 100%.
Sone simple Schritt für babyschritt Anleitung wäre gut. Hmm
Antworten