Seite 1 von 1

Pygame mit tkinter erweitern ?

Verfasst: Sonntag 3. August 2014, 09:51
von jens
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?

Re: Pygame mi tkinter erweitern ?

Verfasst: Sonntag 3. August 2014, 10:07
von 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.

Re: Pygame mit tkinter erweitern ?

Verfasst: Sonntag 3. August 2014, 10:39
von jens
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.

Re: Pygame mit tkinter erweitern ?

Verfasst: Sonntag 3. August 2014, 10:46
von 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?

Re: Pygame mit tkinter erweitern ?

Verfasst: Sonntag 3. August 2014, 14:28
von jens
Natürlich geht es wieder im DragonPy :D

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...

Re: Pygame mit tkinter erweitern ?

Verfasst: Sonntag 3. August 2014, 23:06
von jens
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:

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..",
        "........",
    ),
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:
Bild

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)
Ich gehe mal davon aus, das nach jedem "Event" automatisch ein update() durchgeführt wird, oder?
Vielleicht mit .after() behelfen?

Re: Pygame mit tkinter erweitern ?

Verfasst: Dienstag 5. August 2014, 09:31
von jens
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...