Ich hab sehr wenig Ahnung von pygame. Ich über lege das ich eine pygame Oberfläche mit tkinter ergänze. Also z.b. ein Menü, Datei öffen Dialoge usw. mit Tk machen... Brauche dann später noch ein Einstellung Menü...
Macht das sinn? Oder sollte man das vermeiden?
Pygame mit tkinter erweitern ?
-
BlackJack
@jens: Was auf der Pygame-Seite zu dem Thema steht: http://www.pygame.org/wiki/gui
Man kann halt nur 1 Pygame-Fenster/Display haben und man muss die beiden Hauptschleifen irgendwie selber fusionieren.
Man kann halt nur 1 Pygame-Fenster/Display haben und man muss die beiden Hauptschleifen irgendwie selber fusionieren.
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Hab http://gamedev.stackexchange.com/questi ... for-pygame gefunden.
Demnach gibt es ein paar UI widget toolkits für PyGame, aber nichts so richtig befriedigendes...
Zumal ich eh auf jeden Fall ein richtiges seperates Fenster haben will. Z.b. mit einem grossen editor Text Feld.
Demnach gibt es ein paar UI widget toolkits für PyGame, aber nichts so richtig befriedigendes...
Zumal ich eh auf jeden Fall ein richtiges seperates Fenster haben will. Z.b. mit einem grossen editor Text Feld.
-
BlackJack
@jens: Ich vermute mal es geht um den Emulator, in wie weit brauchst Du Denn dort tatsächlich ”Grafikfähigkeiten” die über das hinausgehen was man mit Tkinter machen kann?
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Natürlich geht es wieder im DragonPy
Ja, also ich weiß auch nicht, ob die alles in Tkinter machen kann. Momentan ist der Text-Display mit PyGame recht einfach: https://github.com/jedie/DragonPy/blob/ ... display.py
Weiß jetzt spontan nicht, wie ich das in Tk Lösen kann.
Allerdings gibt es ja auch tkinter.PhotoImage() Damit könnte ich auch die original Pixel-Schrift nachmachen
Die original Schrift gibt es als PNG hier:
https://github.com/jedie/XRoar/blob/mas ... t-6847.png
bzw.:
https://github.com/jedie/XRoar/blob/mas ... 6847t1.png
Hm...
Ja, also ich weiß auch nicht, ob die alles in Tkinter machen kann. Momentan ist der Text-Display mit PyGame recht einfach: https://github.com/jedie/DragonPy/blob/ ... display.py
Weiß jetzt spontan nicht, wie ich das in Tk Lösen kann.
Allerdings gibt es ja auch tkinter.PhotoImage() Damit könnte ich auch die original Pixel-Schrift nachmachen
Die original Schrift gibt es als PNG hier:
https://github.com/jedie/XRoar/blob/mas ... t-6847.png
bzw.:
https://github.com/jedie/XRoar/blob/mas ... 6847t1.png
Hm...
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Hab mal ein Test gemacht...
Ich habe das PNG Bild des Fonts genommen und die einzelnen Buchstaben in ein Dict "konvertiert".
Dazu habe ich pyPNG ( https://pythonhosted.org/pypng/index.html ) genommen und das ganze generieren lassen:
Klar, ich TKinter kann auch GIF, PGM oder X11 Bitmaps verarbeiten, aber ich fand es mal ganz spannend, das auf diesen Weg zu machen 
Aus den einzelnen Buchstaben Daten generiere ich ein Tkinter.PhotoImage Instanz, die ich dann auf ein Tkinter.Canvas per canvas.create_image() einfüge...
Hab gleich mal ein Test mit gemacht, man kann einfach mit den Pfeil-hoch/-runter Tasten durch die Farbpallette gehen. Die fertig generieren Tkinter.PhotoImage Instanzen, werden in ein cache gepackt.
Sourcen: https://github.com/jedie/DragonPy/blob/ ... on_font.py
sieht dann so aus:

Ich hatte nach jedem canvas.create_image() auch ein self.root.update() gemacht. Das bremst allerdings total aus.
Ohne update() geht es auch und ist deutlich schneller. Aber ich weiß nicht, ob ich im "produktiv system" auf ein self.root.update() verzichten kann.
Ich vermute mal, das bei der Test-Implementierung ein self.root.update() aus dem mainloop herraus angestoßen wird, weil ein Neuzeichnen ja über das folgende angestoßen wird:
Ich gehe mal davon aus, das nach jedem "Event" automatisch ein update() durchgeführt wird, oder?
Vielleicht mit .after() behelfen?
Ich habe das PNG Bild des Fonts genommen und die einzelnen Buchstaben in ein Dict "konvertiert".
Dazu habe ich pyPNG ( https://pythonhosted.org/pypng/index.html ) genommen und das ganze generieren lassen:
Code: Alles auswählen
u'A': (# LATIN CAPITAL LETTER A
"....X...",
"...X.X..",
"..X...X.",
"..X...X.",
"..XXXXX.",
"..X...X.",
"..X...X.",
"........",
),
u'B': (# LATIN CAPITAL LETTER B
"..XXXX..",
"...X..X.",
"...X..X.",
"...XXX..",
"...X..X.",
"...X..X.",
"..XXXX..",
"........",
),
u'C': (# LATIN CAPITAL LETTER C
"...XXX..",
"..X...X.",
"..X.....",
"..X.....",
"..X.....",
"..X...X.",
"...XXX..",
"........",
),Aus den einzelnen Buchstaben Daten generiere ich ein Tkinter.PhotoImage Instanz, die ich dann auf ein Tkinter.Canvas per canvas.create_image() einfüge...
Hab gleich mal ein Test mit gemacht, man kann einfach mit den Pfeil-hoch/-runter Tasten durch die Farbpallette gehen. Die fertig generieren Tkinter.PhotoImage Instanzen, werden in ein cache gepackt.
Sourcen: https://github.com/jedie/DragonPy/blob/ ... on_font.py
sieht dann so aus:

Ich hatte nach jedem canvas.create_image() auch ein self.root.update() gemacht. Das bremst allerdings total aus.
Ohne update() geht es auch und ist deutlich schneller. Aber ich weiß nicht, ob ich im "produktiv system" auf ein self.root.update() verzichten kann.
Ich vermute mal, das bei der Test-Implementierung ein self.root.update() aus dem mainloop herraus angestoßen wird, weil ein Neuzeichnen ja über das folgende angestoßen wird:
Code: Alles auswählen
self.root.bind('<Down>', self.event_arrow_down)
self.root.bind('<Up>', self.event_arrow_up)Vielleicht mit .after() behelfen?
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Also mich würde das doch noch interessieren...
Mal anders gefragt: Kann ich ein Pygame "Fenster" in ein Tkinter GUI einblenden/drüber legen?
EDIT: Entdecke gerade: http://pygame.org/tags/tkinter vielleicht ist da was dabei...
Mal anders gefragt: Kann ich ein Pygame "Fenster" in ein Tkinter GUI einblenden/drüber legen?
EDIT: Entdecke gerade: http://pygame.org/tags/tkinter vielleicht ist da was dabei...
