GUI Tkinter Probleme?

...komplette Frage anzeigen

1 Antwort

Als aller erstes empfehle ich dir bei solchen "basic" sachen einfach mal zu recherchieren: http://effbot.org/tkinterbook/radiobutton.htm. Dort findest du eigentlich alles was du brauchst.

Bei deinem "richtigen problem", gebe ich zu, dass mich das auch mal länger beschäftigt hat (suche noch das richtige skript)

Nun denn

1. sollte mit dem command Befehl zu erreichen sein:
rbutton = tk.Radiobutton(..., command = funktion)
Die funktion wird immer dann aufgerufen, wenn du auf ein Radiobutton klickst.

2. Das einfachste wäre wenn du das mit if machst. In meinem Beispiel siehst du aber auch, dass man es durchaus anders machen kann.

3. (2.) Du "bindest" tasten an bestimme funktionen mithilfe des .bind befehls:

root.bind( "<Up>", move_up)
root.bind( "<Right>", move_right)
root.bind( "<Down>", move_down)
root.bind( "<Left>", move_left)

move_up <-- Funktion die dann aufgerufen werden sollen.

Das wird aber sicher nicht ganz gut gehen. Ich suche noch eine bessere Methode ... falls ich Zeit finde ...

Ich kriege ich echt einen zu viel mit diesem "Snippet Manager"... Code ist im Kommentar

Antwort bewerten Vielen Dank für Deine Bewertung
LifeArtist1 16.06.2016, 17:50

Hier ist mein Skript: http://pastebin.com/Ntc8zEyQ

Wenn du python 2 verwendest, musst du einfach die Klammern vom print wegnehmen und tkinter zu Tkinter umbenennen

0
NewbieByAll 18.06.2016, 05:32
@LifeArtist1

Vielen Dank für deine Mühe und Hilfe. :)

Den Teil mit den Radiobuttons habe ich noch weiter gekürzt und einfach die zusätzlichen Buttons als commands definiert und dahinter geschrieben. Damit wäre der Teil abgeschlossen.

Jetzt habe ich nur noch das Problem mit der Steuerung des Balls. Ich habe mir die Befehle angeschaut und leider nicht durchschaut wie man sie einsetzt.

Der Ball soll das zu steuernde Objekt sein. Diesen würde ich mithilfe von Pixel-Addition/-Subtraktion steuern. Dafür müsste ich aber eine Bedingung (if) definieren, wann ich addiere bzw. Subtrahiere. Es funktioniert ja nicht, da mit eine Druckbestätigung von einer beliebigen Taste fehlt.

if [beliebiger Tastendruck] = '<Right>':
Dann eben der Rechenvorgang

Die genaue Rechnung hab ich noch nicht, das wird sich durch rumprobieren lösen lassen.

Ich hoffe sehr auf weitere Zusammenarbeit :)

 MfG NewbieByAll

PS: Wenn das Spiel fertig ist, darfst du es natürlich als erster testen :D ausser dü würdest es dir vorher schonmal anschauen wollen ;)

0
LifeArtist1 18.06.2016, 17:51
@NewbieByAll

Also bevor ich jetzt noch irgendwas schreibe, möchte ich dich erstmal darauf hinweisen, dass du nicht entäuscht sein darfst wenn es nicht so flüssig läuft wie es soll. Tkinter ist kein wirkliches mittel um spiele zu verwirklichen. (Naja sagen wir mal realtime games) Da ich nicht weiß wie kompliziert es werden soll kannst du es natürllich versuchen. Bei komplexeren Sachen, rate ich dir entweder pygame zu benutzen (habe ich bisher noch nicht) oder einer anderen Spiele Bibliothek zuzugreifen. Ich selbst habe bisher "nur" direkt opengl mit python verwendet, was die effektivste Lösung aber sicherlich nicht die schnellste ist.

On Topic:
root.bind("<Up>", moveUp) mit diesem befehl wird sobald die Pfeil Taste nach oben gedrückt wird moveUp ausgeführt. D.h wenn du eine Rechnung für Up haben möchtest müsste die in moveUp einfach nur stehen.

Das widerum heißt du bräuchtest 4 Methoden [...] Blablabla ... Kürzen wir das hier ab es würde nicht ganz funktionieren. Du wirst an eine grenze stoßen, nämlich dann wenn du versuchst 2 Tasten gleichzeitig zu drücken. 

Deswegen:

Das wird aber sicher nicht ganz gut gehen. Ich suche noch eine bessere Methode ... falls ich Zeit finde ...

Ich habe jetzt bei stackoverflow eine bessere Methode gefunden. Soweit ich sehen kann verwendet er quasi eine messagequeue um die angeschlagenen Tasten in eine Warteschlange zu stecken und erst dann den angeschlagenen Key rauszuwefen wenn er wieder losgelassen wurde. Soweit meine schnelle interpretation.

Hier der Link: http://stackoverflow.com/questions/2138518/python-bind-allow-multiple-keys-to-be-pressed-simultaniously

0

Was möchtest Du wissen?