2012-09-21 213 views
5

No he trabajado anteriormente en Python. Necesito hacer una superficie 2d realmente simple donde pueda colocar una flecha y luego poder cambiar la posición y el ángulo de la flecha.Superficie 2d simple con flecha en python?

Comencé a construir algo así en tkinter, pero según tengo entendido, no puedes rotar las imágenes. A mi entender, solo los polígonos pueden rotarse. Parece un poco demasiado complicado dibujar una flecha como un polígono.

¿Hay algunas otras herramientas que sean más adecuadas para este tipo de cosas simples?

Gracias

Respuesta

0

El kit de herramientas wxPython GUI (considerado que yo sepa mejor y más profesional que TkInter de todos modos) tiene un método de rotación para su clase de archivo: http://wxpython.org/docs/api/wx.Image-class.html.

La biblioteca de imágenes de Python (no es un juego de herramientas de GUI, sino una biblioteca de imágenes) también admite la rotación de imágenes: http://effbot.org/imagingbook/image.htm.

+0

¿Cómo se define "más profesional"? Esa declaración no tiene ningún sentido para mí. –

+0

Solo por la apariencia de la GUI resultante. Realmente no tengo ningún interés personal con wxPython, es algo que escuché decir a la gente (en lo que respecta a Tkinter). No me importa de ninguna manera. – Harel

5

Tkinter es una excelente opción para una tarea tan simple. Es casi seguro que ya lo tienes instalado, y el widget Canvas es notablemente poderoso. Tiene instalaciones incorporadas para dibujar líneas que tienen una flecha al final, y la rotación es muy directa.

No deje que el "conocimiento común" sobre Tkinter influya sobre usted: es un conjunto de herramientas moderno, estable y extremadamente fácil de usar. No puede crear el próximo photoshop o iMovie con él, pero para la mayoría de las personas y para la mayoría de las aplicaciones es una opción muy sólida y pragmática.

Aquí es una rápida y sucia ejemplo:

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

Estoy de acuerdo. Me parece que mis aplicaciones 'Tkinter' se ven y se sienten bien. – mgilson

+0

Ese código se ve genial. Lo intentaré y lo veré por mí mismo. ¡Gracias! – Chippen

1

lo podría hacer en visual y/o vpython. http://www.vpython.org/ Vpython afirma ser una programación 3-d para los mortales comunes. Está basado en la imagen visual que he usado antes y me pareció fácil de usar.

+0

Esto parece una buena respuesta de candidato. Un enlace a una API o algo sería útil para hacer que esta respuesta sea más completa. – scorpiodawg

Cuestiones relacionadas