2012-09-21 3 views
5

Ich habe vorher nicht in Python gearbeitet. Ich muss eine wirklich einfache 2D-Oberfläche machen, wo ich einen Pfeil platzieren kann und dann in der Lage bin, die Position und den Winkel des Pfeils zu ändern.Einfache 2d Oberfläche mit Pfeil in Python?

Ich fing an, etwas wie es in Tkinter zu bauen, aber wie ich es verstehe, sind Sie nicht in der Lage, Bilder zu drehen. Zu meinem Verständnis können nur Polygone gedreht werden. Es erscheint ein wenig zu kompliziert, einen Pfeil als Polygon zu zeichnen.

Gibt es einige andere Tools, die für diese Art von einfachen Sachen besser geeignet sind?

Dank

Antwort

0

Der wxPython GUI-Toolkit (als AFAIK besser und professioneller als TkInter sowieso) ein Drehen Verfahren für seine Image-Klasse: http://wxpython.org/docs/api/wx.Image-class.html.

Die Python-Imaging-Bibliothek (kein GUI-Toolkit, sondern eine Bildgebungsbibliothek) unterstützt ebenfalls die Bildrotation: http://effbot.org/imagingbook/image.htm.

+0

Wie definieren Sie "professioneller"? Diese Aussage ergibt für mich keinen Sinn. –

+0

Nur durch das Aussehen und das Gefühl der resultierenden GUI. Ich habe wirklich keine persönlichen Interessen mit WxPython, es ist nur etwas, das ich Leute sagen hörte (in Bezug auf Tkinter). Es ist mir egal. – Harel

5

Tkinter ist eine ausgezeichnete Wahl für solch eine einfache Aufgabe. Sie haben es fast sicher schon installiert und das Canvas Widget ist bemerkenswert leistungsstark. Es hat eingebaute Einrichtungen, um Linien zu zeichnen, die einen Pfeil am Ende haben, und die Rotation ist sehr geradlinig.

Lassen Sie sich nicht von "allgemeinem Wissen" über Tkinter beeinflussen - es ist ein modernes, stabiles und extrem einfach zu bedienendes Toolkit. Sie können nicht den nächsten Photoshop oder iMovie damit erstellen, aber für die meisten Menschen und für die meisten Apps ist es eine sehr solide, pragmatische Wahl.

Hier ist ein schnelles und schmutziges Beispiel:

import Tkinter as tk 
import math 

class ExampleApp(tk.Tk): 
    def __init__(self): 
     tk.Tk.__init__(self) 
     self.canvas = tk.Canvas(self, width=400, height=400) 
     self.canvas.pack(side="top", fill="both", expand=True) 
     self.canvas.create_line(200,200, 200,200, tags=("line",), arrow="last") 
     self.rotate() 

    def rotate(self, angle=0): 
     '''Animation loop to rotate the line by 10 degrees every 100 ms''' 
     a = math.radians(angle) 
     r = 50 
     x0, y0 = (200,200) 
     x1 = x0 + r*math.cos(a) 
     y1 = y0 + r*math.sin(a) 
     x2 = x0 + -r*math.cos(a) 
     y2 = y0 + -r*math.sin(a) 
     self.canvas.coords("line", x1,y1,x2,y2) 
     self.after(100, lambda angle=angle+10: self.rotate(angle)) 

app = ExampleApp() 
app.mainloop() 
+0

Ich stimme zu. Ich finde, dass meine 'Tkinter' Apps gut aussehen und sich gut anfühlen. – mgilson

+0

Dieser Code sieht gut aus. Ich werde es versuchen und für mich selbst sehen. Vielen Dank! – Chippen

1

Sie auf visuelle aussehen könnten und/oder VPython. http://www.vpython.org/ Vpython behauptet, 3-D-Programmierung für gewöhnliche Sterbliche zu sein. Es basiert auf visuellen Elementen, die ich zuvor verwendet habe und leicht zu erlernen ist.

+0

Das sieht nach einer guten Kandidaten-Antwort aus. Ein Link zu einer API oder etwas wäre hilfreich, um diese Antwort vollständiger zu machen. – scorpiodawg