2012-09-21 62 views
5

Tôi chưa từng làm việc với python. Tôi cần phải làm một bề mặt 2d thực sự đơn giản, nơi tôi có thể đặt một mũi tên và sau đó có thể thay đổi vị trí và góc của mũi tên.Bề mặt 2d đơn giản với mũi tên trong python?

Tôi bắt đầu xây dựng một cái gì đó giống như nó trong tkinter, nhưng như tôi hiểu nó bạn không thể xoay hình ảnh. Để hiểu biết của tôi chỉ đa giác có thể được luân chuyển. Có vẻ hơi quá phức tạp để vẽ mũi tên thành đa giác.

Có một số công cụ khác phù hợp hơn với loại công cụ đơn giản này không?

Cảm ơn

Trả lời

0

Bộ công cụ wxPython GUI (coi AFAIK tốt hơn và chuyên nghiệp hơn Tkinter anyways) có một phương pháp xoay cho lớp Image của nó: http://wxpython.org/docs/api/wx.Image-class.html.

Thư viện hình ảnh Python (không phải là bộ công cụ GUI, nhưng thư viện hình ảnh) cũng hỗ trợ xoay hình ảnh: http://effbot.org/imagingbook/image.htm.

+0

Làm thế nào để bạn xác định "chuyên nghiệp hơn"? Tuyên bố đó không có ý nghĩa gì với tôi. –

+0

Chỉ bằng giao diện của GUI kết quả. Tôi thực sự không có bất kỳ cổ phần cá nhân với wxPython, nó chỉ là một cái gì đó tôi nghe mọi người nói (liên quan đến Tkinter). Tôi cũng không quan tâm. – Harel

5

Tkinter là một lựa chọn tuyệt vời cho một nhiệm vụ đơn giản như vậy. Bạn gần như chắc chắn đã có nó được cài đặt, và các widget Canvas là đáng kể mạnh mẽ. Nó có các cơ sở tích hợp để vẽ các đường có mũi tên ở cuối và quay rất thẳng về phía trước.

Đừng để "kiến thức chung" về Tkinter ảnh hưởng đến bạn - đó là bộ công cụ hiện đại, ổn định và cực kỳ dễ sử dụng. Bạn không thể tạo ra photoshop tiếp theo hoặc iMovie với nó, nhưng đối với hầu hết mọi người và cho hầu hết các ứng dụng nó là một sự lựa chọn rất vững chắc, thực dụng.

Dưới đây là một ví dụ nhanh chóng và bẩn:

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

Tôi đồng ý. Tôi thấy rằng các ứng dụng 'Tkinter' của tôi nhìn và cảm thấy ổn. – mgilson

+0

Mã đó trông tuyệt vời. Tôi sẽ thử nó và tự mình xem. Cảm ơn! – Chippen

1

bạn có thể nhìn vào hình ảnh và/hoặc vpython. http://www.vpython.org/ Vpython tuyên bố là chương trình 3-d cho những con người bình thường. Nó dựa trên hình ảnh mà tôi đã sử dụng trước và thấy dễ dàng để chọn lên.

+0

Điều này trông giống như một câu trả lời ứng cử viên tốt. Một liên kết đến một API hoặc một cái gì đó sẽ rất hữu ích để làm cho câu trả lời này hoàn chỉnh hơn. – scorpiodawg

Các vấn đề liên quan