2012-09-21 17 views
5

Daha önce python çalışmamıştım. Ok yerleştirebildiğim ve daha sonra okun konumunu ve açısını değiştirebileceğim gerçekten basit bir 2d yüzey yapmak zorundayım.Python'da ok içeren basit 2d yüzey?

Kiremit gibi bir şey yapmaya başladım, ancak anladığım kadarıyla görüntüleri döndüremiyorsunuz. Benim anlayışıma sadece çokgenler döndürülebilir. Çokgen olarak ok çizmek biraz karmaşık görünüyor.

Bu tür basit şeyler için daha uygun başka araçlar var mı? http://wxpython.org/docs/api/wx.Image-class.html:

Teşekkür

cevap

0

wxPython GUI (AFAIK daha iyi ve her durumda Tkinter daha profesyonel kabul) kendi Görüntü sınıfı için bir döndürme yöntemi vardır.

Python Imaging Library (değil bir GUI ama bir görüntüleme kütüphanesi) aynı şekilde görüntü dönüşünü destekler: http://effbot.org/imagingbook/image.htm.

+0

"Daha profesyonel" i nasıl tanımlarsınız? Bu ifade benim için hiçbir şey ifade etmiyor. –

+0

Sadece ortaya çıkan GUI'nin görünümü ve hissi. WxPython ile gerçekten hiçbir kişisel payım yok, sadece insanların söylediklerini duyduğum bir şey var (Tkinter ile ilgili olarak). İki yönden de umrumda değil. – Harel

5

Tkinter bu kadar basit bir iş için mükemmel bir seçimdir. Neredeyse kesinlikle yüklemişsiniz ve Canvas widget'ı oldukça güçlüdür. Sonunda bir ok bulunan çizgiler çizmek için yerleşik özelliklere sahiptir ve dönüş çok düzdür.

Tkinter hakkında "ortak bilgi" ye izin vermeyin - bu modern, sağlam ve kullanımı son derece kolay bir araç takımıdır. Onunla bir sonraki photoshop veya iMovie'yi yaratamazsınız, ancak çoğu insan için ve çoğu uygulama için bu çok sağlam, pragmatik bir seçimdir.

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

Katılıyorum. “Tkinter” uygulamalarının iyi göründüğünü ve hissedildiğini görüyorum. – mgilson

+0

Bu kod harika görünüyor. Onu deneyeceğim ve kendim göreceğim. Teşekkürler! – Chippen

1

görsel ve/veya vpython de görünebilir:

İşte hızlı ve kirli bir örnektir. http://www.vpython.org/ Vpython sıradan faniler için 3-d programlama olduğunu iddia ediyor. Daha önce kullanmış olduğum görsellere dayanıyor ve almayı kolay buluyordu.

+0

Bu iyi bir aday cevabı gibi görünüyor. Bir API veya bir şeye bağlantı, bu cevabı daha eksiksiz hale getirmek için yardımcı olabilir. – scorpiodawg