Hallo
Ich bin noch im Anfangsstadium und komme mit den Hilfen nicht weiter.
Kann mir jemand sagen, wie man einen einfachen Kreis der Farbe f in einer bestimmten Größe macht an der Stelle x, y? (Oder auch Quadrat)
Danke
Gtk Kreise zeichnen
das sagt mir jetzt nichts .. aber ich würde lieber etwas nutzen was man auch leicht auf Windows übertragen kann. Oder geht das damit auch?
Ansonsten könnte man auch Bilder nehmen denke ich aber das ist nicht ganz Sinn der Sache ...
Das ganze wird ein Spielfeld. Mein Programm ist eine KI dazu. ich möchte dieses Tool anschließend nutzen um meine Berechnungen zu visualisieren.
Ansonsten könnte man auch Bilder nehmen denke ich aber das ist nicht ganz Sinn der Sache ...
Das ganze wird ein Spielfeld. Mein Programm ist eine KI dazu. ich möchte dieses Tool anschließend nutzen um meine Berechnungen zu visualisieren.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Soweit ich weiß nicht, GooCanvas läuft auch auf Windows aber die Python-Bindings wurden bischer nicht für Windows kompiliert.iceman21 hat geschrieben:das sagt mir jetzt nichts .. aber ich würde lieber etwas nutzen was man auch leicht auf Windows übertragen kann. Oder geht das damit auch?
Ansonsten lässt sich gegebenfalls direkt etwas über Cairo zeichnen, aber da bin ich überfragt wie das gehen soll.
Wie gut dass ich solche Probleme nicht mehr habe
Falls es nicht unbedingt GTK sein muss: Mit Tkinter ist so etwas sehr einfach möglich und läuft unter Windows und Linux gleichermaßen ohne Probleme.iceman21 hat geschrieben:Hallo
Ich bin noch im Anfangsstadium und komme mit den Hilfen nicht weiter.
Kann mir jemand sagen, wie man einen einfachen Kreis der Farbe f in einer bestimmten Größe macht an der Stelle x, y? (Oder auch Quadrat)
Danke
ja? wie geht das denn da? und ist das leicht zu benutzen? habe mich jetzt gerade an gtk angearbeitet
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Erster Treffer wenn ich nach "Cairo draw on window" suche sieht schon sehr interessant aus.
iceman21 hat geschrieben:ja? wie geht das denn da? und ist das leicht zu benutzen? habe mich jetzt gerade an gtk angearbeitet
Code: Alles auswählen
import Tkinter as tk
root = tk.Tk()
canvas = tk.Canvas(root)
canvas.pack()
canvas.create_oval(10,10,80,80, fill="red")
root.mainloop()
ok Nach ein paar Spielereien mit dem netten Tool was ich aus der Beispieluhr gebaut habe kommt jetzt ein Fehler wenn ich einen 2. Kreis zeichnen möchte weil der da "nicht mehr rein passt"
Wie kann man das umgehen? Vielleicht mit extra frames? ps ich brauche um die 550 Kreise (23*23 Spielbrett)
Bei den ganzen Vorschlägen kann man sich ja gar nicht entscheiden ... Also ich brauche ein Spielbrett mit 23*23 Kreisen die ich einzeln einfärben möchte. Zudem muss ich noch ein paar Linien zeichnen, die Punkte Verbinden und Eine Zahl in die Punkte schreiben. Womit geht das am einfachsten?
Code: Alles auswählen
GtkWarning: Attempting to add a widget with type GtkDrawingArea to a GtkWindow, but as a GtkBin subclass a GtkWindow can only contain one widget at a time; it already contains a widget of type GtkDrawingArea
window.add(circle2)
Bei den ganzen Vorschlägen kann man sich ja gar nicht entscheiden ... Also ich brauche ein Spielbrett mit 23*23 Kreisen die ich einzeln einfärben möchte. Zudem muss ich noch ein paar Linien zeichnen, die Punkte Verbinden und Eine Zahl in die Punkte schreiben. Womit geht das am einfachsten?
Mit Tkinter sieht das so aus:iceman21 hat geschrieben:Bei den ganzen Vorschlägen kann man sich ja gar nicht entscheiden ... Also ich brauche ein Spielbrett mit 23*23 Kreisen die ich einzeln einfärben möchte. Zudem muss ich noch ein paar Linien zeichnen, die Punkte Verbinden und Eine Zahl in die Punkte schreiben. Womit geht das am einfachsten?
Code: Alles auswählen
import Tkinter as tk
from random import randrange
root = tk.Tk()
d = 20
canvas = tk.Canvas(root, width=d*25, height=d*25)
for y in xrange(23):
for x in xrange(23):
color = "#%02x%02x%02x" %(randrange(256),randrange(256),randrange(256))
canvas.create_oval(d+x*d,d+y*d,2*d+x*d,2*d+y*d, fill=color)
canvas.pack()
root.mainloop()
Du versuchst mehr als ein Widget in ein Fenster zu packen, was nicht geht. Dafür brauchst du Container.
Und mit Cairo könnte man das zeichnen. Da kann man dann auch einfach eine Transformationsmatrix setzen, so dass man schön unabhängig von der Widgetgröße das Spielfeld zeichnen kann, ohne da groß rumrechnen zu müssen. Hier ist ein Beispiel-Widget, das Cairo verwendet und ich mal für einen anderen Thread gebaut habe.
Und mit Cairo könnte man das zeichnen. Da kann man dann auch einfach eine Transformationsmatrix setzen, so dass man schön unabhängig von der Widgetgröße das Spielfeld zeichnen kann, ohne da groß rumrechnen zu müssen. Hier ist ein Beispiel-Widget, das Cairo verwendet und ich mal für einen anderen Thread gebaut habe.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Was soll das denn für ein Spiel werden? Denn man könnte unter Unmständen diese Cairo-Widgets in ein gtk.Table setzen und dadurch hast du sie automatisch hübsch plaziert. Vorrausgesetzt du musst nicht Linien quer über alle Kreise zeichnen oder so (deswegen frage ich was das für ein Spiel werden soll).
Eigentlich nicht. Es gibt nur das QGraphicsView-Framework, was für einen einfachen Kreis allerdings viel zu viel Aufwand ist. Den kann man auch direkt auf das Widget zeichnen. Für ein Spielbrett aber wäre das QGraphicsView-Zeug ideal. Bei Interesse kann ich dafür gerne auch ein Beispiel erstellen.Leonidas hat geschrieben:Da würde ich ja schon lieber Qt nehmen, das hat auch ein Canvas-Widget mit dabei
so ich habe mich jetzt für Tkinter entschieden. Damit bin ich recht schnell weiter gekommen. hier mein bisheriger Code:
http://paste.pocoo.org/show/101925/
Wenn ihr mir jetzt nur noch sagen könntet wie man eine Linie malt, wäre das super. Und noch wie man an eine bestimmte Position x,y etwas schreibt.
Bin eigentlich schon fast fertig. Muss es nur noch einbinden also eine Klasse dafür schreiben.
Edit (Leonidas): Thread verschoben.
http://paste.pocoo.org/show/101925/
Wenn ihr mir jetzt nur noch sagen könntet wie man eine Linie malt, wäre das super. Und noch wie man an eine bestimmte Position x,y etwas schreibt.
Bin eigentlich schon fast fertig. Muss es nur noch einbinden also eine Klasse dafür schreiben.
Edit (Leonidas): Thread verschoben.
Streng dich mal an: http://effbot.org/tkinterbook/canvas.htmiceman21 hat geschrieben:Wenn ihr mir jetzt nur noch sagen könntet wie man eine Linie malt, wäre das super. Und noch wie man an eine bestimmte Position x,y etwas schreibt.
OK habe das jetzt zwar alles geschafft aber leider kommt schon das nächste problem. Der mainloop von Tkinter verhindert es, dass meine KI weiterrechnet nachdem es die Oberfläche anzeigt. Das heißt ich muss es entweder als Extra Programm laufen lassen oder ich nehme eine andere GUI. Geht das mit andern GUI's überhaupt? Also ein Fenster ohne Loop, sodass der Script danach weiter ausgeführt wird?
Du hast eine Grundidee von GUIs noch nicht verstanden. Der Weg wäre dieser: GUI aufsetzen bis mainloop() - Aufbau steht. Dann z.B. einen Button auf der GUI haben, bei dessen Klick die Berechnung durchgeführt wird.iceman21 hat geschrieben:OK habe das jetzt zwar alles geschafft aber leider kommt schon das nächste problem. Der mainloop von Tkinter verhindert es, dass meine KI weiterrechnet nachdem es die Oberfläche anzeigt. Das heißt ich muss es entweder als Extra Programm laufen lassen oder ich nehme eine andere GUI. Geht das mit andern GUI's überhaupt? Also ein Fenster ohne Loop, sodass der Script danach weiter ausgeführt wird?