To delo je na voljo pod pogoji slovenske licence Creative Commons 2.5:
priznanje avtorstva - nekomercialno - deljenje pod enakimi pogoji.
Celotna licenca je na voljo na spletu na naslovu http://creativecommons.org/licenses/by-nc-sa/2.5/si/. V skladu s to licenco je dovoljeno vsakemu uporabniku delo razmnoževati, distribuirati, javno priobčevati, dajati v najem in tudi predelovati, vendar samo v nekomercialne namene in ob pogoju, da navede avtorja oziroma avtorje in izdajatelja tega dela. Če uporabnik delo predela, kar pomeni, da ga spremeni, preoblikuje, prevede ali uporabi to delo v svojem delu, lahko predelavo dela ponudi na voljo le pod pogoji, ki so enaki pogojem iz te licence oziroma pod enako licenco.
![]()
import simplegui
import random
# Definicija globalnih spremenljivk
SIRINA = 400
VISINA = 300
# Definicija razreda 'Kvadrat'
class Kvadrat:
# Ustvari objekt 'Kvadrat' privzete barve in velikosti
def __init__(self, barva="white", dolzina=30):
self._barva = barva
self._d = dolzina
self._polozaj = [dolzina+1, dolzina+1]
self._hitrost_x = random.randrange(-10, 10)
self._hitrost_y = random.randrange(-10, 10)
def premakni(self, platno):
self._polozaj[0] += self._hitrost_x
self._polozaj[1] += self._hitrost_y
tocke = [
(self._polozaj[0], self._polozaj[1]),
(self._polozaj[0]+self._d, self._polozaj[1]),
(self._polozaj[0]+self._d, self._polozaj[1]+self._d),
(self._polozaj[0], self._polozaj[1]+self._d)
]
platno.draw_polygon(tocke, 1, "black", self._barva)
if (self._polozaj[1] >= VISINA-self._d or
self._polozaj[1] <= 0):
self._hitrost_y = -self._hitrost_y
if (self._polozaj[0] >= SIRINA-self._d or
self._polozaj[0] <= 0):
self._hitrost_x = -self._hitrost_x
barve = ["red", "green", "blue", "yellow", \
"orange", "magenta", "cyan"]
kvadrati = []
# Dodaj 100 kvadratov naključnih velikosti in barv
for i in range(100):
kvadrati.append(Kvadrat(random.choice(barve), \
random.randrange(20, 80)))
# Določi rokovalnik animacije
def draw(platno):
for kvadrat in kvadrati:
kvadrat.premakni(platno)
# Ustvari okvir in ga poveži s rokovalnikom animacije
okvir = simplegui.create_frame("Kvadrati", SIRINA, VISINA)
okvir.set_draw_handler(draw)
# Zaženi animacijo okvirja
okvir.start()
# encoding: utf-8
import tkinter as tk
import random
# Definicija globalnih spremenljivk
SIRINA = 400
VISINA = 300
# Ustvari okno in platno
okno = tk.Tk()
okno.title("Kvadrati")
platno = tk.Canvas(okno, width=SIRINA, height=VISINA)
platno.configure(bg="black")
platno.pack()
# Definicija razreda 'Kvadrat'
class Kvadrat:
# Ustvari objekt 'Kvadrat' s privzeto barvo in dolžino
def __init__(self, barva="white", d=30):
self._oblika = platno.create_rectangle(10, 10, d, d, \
fill=barva)
self._hitrost_x = random.randrange(-10, 10)
self._hitrost_y = random.randrange(-10, 10)
# Metoda, ki med animacijo premakne objekt
def premakni(self):
platno.move(self._oblika, self._hitrost_x, self._hitrost_y)
polozaj = platno.coords(self._oblika)
if polozaj[3] >= VISINA or polozaj[1] <= 0:
self._hitrost_y = -self._hitrost_y
if polozaj[2] >= SIRINA or polozaj[0] <= 0:
self._hitrost_x = -self._hitrost_x
barve = ["red", "green", "blue", "yellow", \
"orange", "magenta", "cyan"]
kvadrati = []
# Dodaj 100 kvadratov naključnih velikosti in barv
for i in range(100):
kvadrati.append(Kvadrat(random.choice(barve), \
random.randrange(20, 80)))
# Določi animacijo
def animacija():
for kvadrat in kvadrati:
kvadrat.premakni()
okno.update()
okno.after(20, animacija)
# Zaženi dogodkovno zanko
animacija()
okno.mainloop()
import simplegui
import random
# Definicija globalnih spremenljivk
SIRINA = 400
VISINA = 300
kvadrati = []
stevilo = 0
# Definicija razreda 'Kvadrat'
class Kvadrat:
# Ustvari objekt 'Kvadrat' privzete barve in velikosti
def __init__(self, barva="white", dolzina=30):
self._barva = barva
self._d = dolzina
self._polozaj = [dolzina+1, dolzina+1]
self._hitrost_x = random.randrange(-10, 10)
self._hitrost_y = random.randrange(-10, 10)
def premakni(self, platno):
self._polozaj[0] += self._hitrost_x
self._polozaj[1] += self._hitrost_y
tocke = [
(self._polozaj[0], self._polozaj[1]),
(self._polozaj[0]+self._d, self._polozaj[1]),
(self._polozaj[0]+self._d, self._polozaj[1]+self._d),
(self._polozaj[0], self._polozaj[1]+self._d)
]
platno.draw_polygon(tocke, 1, "black", self._barva)
if (self._polozaj[1] >= VISINA-self._d or
self._polozaj[1] <= 0):
self._hitrost_y = -self._hitrost_y
if (self._polozaj[0] >= SIRINA-self._d or
self._polozaj[0] <= 0):
self._hitrost_x = -self._hitrost_x
barve = ["red", "green", "blue", "yellow", \
"orange", "magenta", "cyan"]
# Določi rokovalnik animacije
def draw(platno):
global kvadrati
for kvadrat in kvadrati:
kvadrat.premakni(platno)
# Določi rokovalnik vnosa
def vnos(vrednost="100"):
global kvadrati, stevilo
kvadrati = []
# Dodaj kvadrate naključnih velikosti in barv
if vrednost.isdigit():
stevilo = int(vrednost)
for i in range(stevilo):
kvadrati.append(Kvadrat(random.choice(barve), \
random.randrange(20, 80)))
# Ustvari okvir in ga poveži s rokovalnikom animacije
okvir = simplegui.create_frame("Kvadrati", SIRINA, VISINA)
okvir.set_draw_handler(draw)
# Ustvari vnosno polje in ga poveži s rokovalnikom
okvir.add_input("Vnesi število kvadratov", vnos, 100)
# Zaženi animacijo okvirja
vnos()
okvir.start()
# encoding: utf-8
import tkinter as tk
import random
# Definicija globalnih spremenljivk
SIRINA = 400
VISINA = 300
# Ustvari okno in platno
okno = tk.Tk()
okno.title("Kvadrati")
okno.geometry("660x350")
okvir = tk.Frame(okno)
okvir.grid(row=0, column=0, pady=20)
platno = tk.Canvas(okno, width=SIRINA, height=VISINA)
platno.configure(bg="black")
platno.grid(row=0, column=1, pady=20)
# Poveži funkcije z dogodkovnimi rokovalniki
opis = tk.Label(okvir, text="Vnesi število kvadratov")
opis.configure(width=20)
opis.grid(row=0, column=0, padx=45)
vnos = tk.Entry(okvir, width=10)
vnos.grid(row=1, column=0, padx=45)
vnos.bind('', (lambda _: rokovalnik(vnos)))
# Definicija razreda 'Kvadrat'
class Kvadrat:
# Ustvari objekt 'Kvadrat' s privzeto barvo in dolžino
def __init__(self, barva="white", d=30):
self._oblika = platno.create_rectangle(10, 10, d, d, \
fill=barva)
self._hitrost_x = random.randrange(-10, 10)
self._hitrost_y = random.randrange(-10, 10)
# Metoda, ki med animacijo premakne objekt
def premakni(self):
platno.move(self._oblika, self._hitrost_x, self._hitrost_y)
polozaj = platno.coords(self._oblika)
if polozaj[3] >= VISINA or polozaj[1] <= 0:
self._hitrost_y = -self._hitrost_y
if polozaj[2] >= SIRINA or polozaj[0] <= 0:
self._hitrost_x = -self._hitrost_x
barve = ["red", "green", "blue", "yellow", \
"orange", "magenta", "cyan"]
kvadrati = []
# Dodaj 100 kvadratov naključnih velikosti in barv
for i in range(100):
kvadrati.append(Kvadrat(random.choice(barve), \
random.randrange(20, 80)))
# Določi rokovalnik vnosa
def rokovalnik(vnos):
global kvadrati
# Izbriši vsebino platna
platno.delete("all")
kvadrati = []
# Dodaj kvadrate naključnih velikosti in
stevilo = 100
vrednost = vnos.get()
if vrednost.isdigit():
stevilo = int(vrednost)
for i in range(stevilo):
kvadrati.append(Kvadrat(random.choice(barve), \
random.randrange(20, 80)))
# Določi animacijo
def animacija():
for kvadrat in kvadrati:
kvadrat.premakni()
okno.update()
okno.after(20, animacija)
# Zaženi dogodkovno zanko
animacija()
okno.mainloop()
4
Program, ki animira 100 žogic spremeni tako, da bo namesto žogic animiral kvadrate. Izgled GUI vmesnika programa naj bo podoben modelu v naslednji nalogi, vendar brez vnosnega polja.
5
Program iz prejšnje naloge spremeni tako, da dodaš vnosno polje, v katerega lahko uporabnik vnese število kvadratov, ki jih bo program animiral.
Izgled GUI vmesnika programa naj bo podoben spodnjemu modelu.
