Η (γλώσσα) Processing είναι ιδανική γι' αυτό που θες να κάνεις (και είναι και πολύ εύκολη). Αν δεν έχει άλλες προγραμματιστικές απαιτήσεις το project σου, αντί να αγχώνεσαι και να τρέχεις από τη μια γλώσσα στην άλλη κάτσε ήρεμα και μάθε μία αρκετά καλά, ώστε να καταλαβαίνεις τι κάνεις.
Αυτό που θες να κάνεις, μπορείς να το κάνεις μόνος σου σε 2 ώρες ως εξής:
1 ώρα, παρακολούθησε αυτό:
http://hello.processing.org/
+1 ώρα (ή λιγότερο): Γράψε στο google "
processing gradient" και κάνε αντιγραφή και προσαρμογή του κώδικα που θα βρεις (π.χ. εδω:
http://processing.org/examples/lineargradient.html, ή εδω:
http://processing.org/examples/radialgradient.html)
Αν θες πάντως σε python αυτό που ζητάς, ο κώδικας που αναφέρει ο
kamar, με κάποιες μικροαλλαγές και κάποιες σημειώσεις για να σε βοηθήσουν, είναι ο εξής:
# -*- coding: utf-8 -*-
# TKinter είναι μια βιβλιοθήκη που μας επιτρέπει να φτιάχνουμε γραφικά
# περιβάλλοντα. Σε αντίθεση με την pygame, δεν χρειάζεται να την εγκα-
# ταστήσεις εσύ. Την περιέχει ήδη η python.
import Tkinter
# Εδώ ορίζουμε μια κλάση (class) που θα την καλέσουμε παρακάτω, στη γραμμή
# που λέει: app = testGUI(root)
class testGUI:
def __init__(self, root):
# Εδώ φτιάχνεται ο canvas. Όπως λέει και η λέξη, canvas είναι το φόντο,
# το background πάνω στο οποίο "ζωγραφίζουμε". Σε αυτή την περίπτωση
# σημαίνει το ίδιο το παράθυρο. Τα keyword arguments bg, width και
# height αναφέρονται, αντίστοιχα, στο χρώμα, το πλάτος και το ύψος του
# παραθύρου.
C = Tkinter.Canvas(root, bg="white", width=800, height=600)
# Εδώ καλούμε μία συνάρτηση (function) που την ορίζουμε λίγο παρακάτω
self.drawGradient(C, 0, 0, 800, 600)
C.pack()
# Εδώ ορίζουμε τη συνάρτηση που θα φτιάξει τη διαβάθμιση (gradient) πάνω
# στον καμβά. x και y είναι οι αρχικές συντεταγμένες. w και h είναι το
# πλάτος και το ύψος. Πιο πάνω που καλούμε τη συνάρτηση φαίνεται τι τιμές
# τους δίνουμε.
def drawGradient(self, canvas, x, y, w, h):
# Εδώ κανονικοποιούμε τις τιμές των R,G,B (βλ. παρακάτω) σε σχέση με
# το πλάτος που δώσαμε παραπάνω (w), για να μπορούμε να "μοιράσουμε"
# τη διαβάθμιση σε όλο το πλάτος.
factor = 255. / w
# Εδώ φτιάχνουμε τη λούπα (loop) που θα φτιάξει τη διαβάθμιση
for offset in range(0, w):
# Εδώ σε κάθε επανάληψη της λούπας ορίζουμε άλλο χρώμα για να τυπω-
# θεί στον καμβά. Η μορφή στην οποία δίνουμε το χρώμα είναι η RGB.
# Καθένα από τα "%02x" αντικαθίσταται από την αντίστοιχη τιμή στην
# παρένθεση (το x σημαίνει ότι αντικαθίσταται σε δεκαεξαδική μορφή).
# Επειδή οι RGB τιμές που δίνουμε είναι της μορφής R=G=B, τελικά
# παίρνουμε αποχρώσεις από το λευκό ως το μαύρο (γκρι).
gradColor = '#%02x%02x%02x' % (offset*factor, offset*factor, offset*factor)
# Εδώ γίνεται ουσιαστικά το "τύπωμα". Μία γραμμή κάθετη για κάθε
# επανάληψη της λούπας.
canvas.create_line(x + offset, y, x + offset, y + h, fill=gradColor)
# Εδώ τρέχει το κυρίως πρόγραμμα
root = Tkinter.Tk()
app = testGUI(root)
root.mainloop()
Tο παραπάνω script φτιάχνει ένα gradient με ακραίες τιμές το
μαύρο και το
λευκό. Αν θες το πρόγραμμά σου να φτιάχνει gradients για
τυχαίες ακραίες τιμές θα πρέπει να τροποποιήσεις τον παραπάνω κώδικα ώστε το
gradcolor (που παίρνει σε κάθε επανάληψη της λούπας μια τιμή της μορφής #RRGGBB, όπου R,G,B δεκαεξαδικοί αριθμοί και R = G = B ) να παίρνει τιμές στο R, στο G και στο Β διαφορετικές μεταξύ τους.
Αν π.χ. οι ακραίες σου τιμές είναι το κόκκινο (#FF0000) και το λευκό (#FFFFFF), το
R θα πρέπει να παίρνει τιμές από F έως F στη διάρκεια της λούπας, το
G από 0 έως F και το
B από 0 έως F.