Frage von NewbieByAll, 44

GUI Tkinter Probleme?

Moinmoin, ich hab von meinem Infokurs aus folgendes Problem: Ich soll per Python programmieren. Ich sollte das Hallo Welt übersprungingen, weil ich bereits rudimentäre Programmierkenntnisse habe. Ich bekam also ein selbstzuwählendes Projekt, welches ich mit Tkinter bearbeiten zu habe. Andere Module als tkinter selbst darf ich jedoch nicht installieren (Schulrechner) Ich hab ein Fenster erstellt und lasse darin per 'random' Befehl verschiedengroße Kreise erscheinen. Mein erstes Problem ist, dass die auswählbaren Radiobuttons die verschiedenen Mengen an Kreisen (entweder 1 oder 2 oder 3 etc) ausführen sollen. Problem: Mir fehlt das Stückchen Code, was den Bestätgungsbefehl einleitet. Man kann per Befehl

RButton_1=Radiobutton(HAUPTFENSTER, text="TEST", padx = 20, variable=TEST, value=1)
RButton_1.pack()

zwar den Button auswählbar machen, es kommt aber kein Bestätigungsbefehl zurück, dass gerade dieser ausgewählt wurde.

Mein 2. Problem ist das Auswerten dieses zurückgegebenen Befehls. Es soll insgesammt 4 verschiedene Schwierigkeitsstufen geben(damit auch 4 verschiedene Radiobuttons). Muss ich das ganze jetzt per 'if'-Befehl auswerten? Wenn ja wie genau?


Mein 2. richtiges (3.) Problem ist die steuerung eines kleinen Punktes. Dies kann man (wie auch der Spielfeldrand und Kreise im Fenster) mit Canvas Oblekten machen. nun bräuchte ich jedoch eine Tastenbelegung zur Steuerung (WASD oder die Pfeiltasten) Wie kann ich diese Tasten belegen?

Wenn das Objekt die Kreise berührt müsste ich das dann per 'if'-Befehl und den Koordinaten der Kreise machen?

Vielen Dank für die Hilfe MfG NewbieByAll :)

Antwort
von LifeArtist1, 30

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

Kommentar von LifeArtist1 ,

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

Kommentar von NewbieByAll ,

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 ;)

Kommentar von LifeArtist1 ,

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

Keine passende Antwort gefunden?

Fragen Sie die Community