2012-09-21 10 views
5

Non ho mai lavorato in Python. Ho bisogno di fare una semplice superficie 2d in cui posso posizionare una freccia e quindi essere in grado di cambiare la posizione e l'angolo della freccia.Semplice superficie 2D con freccia in pitone?

Ho iniziato a costruire qualcosa di simile in tkinter, ma come ho capito non si è in grado di ruotare le immagini. A mio avviso, solo i poligoni possono essere ruotati. Sembra un po 'troppo complicato disegnare una freccia come un poligono.

Ci sono altri strumenti che sono più adatti a questo tipo di cose semplici?

Grazie

risposta

0

Il toolkit wxPython GUI (considerato quanto ne sappia migliore e più professionale rispetto TkInter comunque) ha un metodo di rotazione per la sua classe Image: http://wxpython.org/docs/api/wx.Image-class.html.

La libreria di immagini Python (non un toolkit GUI, ma una libreria di immagini) supporta anche la rotazione dell'immagine: http://effbot.org/imagingbook/image.htm.

+0

Come si definisce "più professionale"? Questa affermazione non ha alcun senso per me. –

+0

Proprio dall'aspetto della GUI risultante. Non ho alcun interesse personale con wxPython, è solo qualcosa che ho sentito dire dalla gente (per quanto riguarda Tkinter). Non mi interessa in alcun modo. – Harel

5

Tkinter è una scelta eccellente per un compito così semplice. Quasi sicuramente l'hai già installato e il widget Canvas è straordinariamente potente. Ha strutture integrate per disegnare linee che hanno una freccia alla fine e la rotazione è molto diretta.

Non lasciare che le "conoscenze comuni" su Tkinter ti influenzino: è un kit di strumenti moderno, stabile ed estremamente facile da usare. Non puoi creare il successivo photoshop o iMovie con esso, ma per la maggior parte delle persone e per la maggior parte delle app è una scelta molto solida e pragmatica.

Ecco un esempio veloce e sporco:

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

Sono d'accordo. Trovo che le mie app 'Tkinter' sembrino andate bene. – mgilson

+0

Questo codice sembra fantastico. Lo proverò e vedrò per me stesso. Grazie! – Chippen

1

si potrebbe guardare visivo e/o vpython. http://www.vpython.org/ Vpython afferma di essere programmatore 3-d per i comuni mortali. È basato sul visual che ho usato prima e ho trovato facile da imparare.

+0

Sembra una buona risposta per il candidato. Un collegamento a un'API o qualcosa sarebbe utile per rendere questa risposta più completa. – scorpiodawg

Problemi correlati