Canvas Objekt bewegen?

Fragen zu Tkinter.
Antworten
Benutzeravatar
krisi12345
User
Beiträge: 205
Registriert: Mittwoch 4. März 2009, 16:56
Wohnort: Das schöne München
Kontaktdaten:

HI!
Die Position eines Canvas kann man ganz einfach ändern in dem Man die Positions Zahlen ändert aber wie kann man dafür sorgen sich ein Objekt gleichmäßig bewegt.
[url=http://www.pc-tutos.de/Tutorials/Tutorials.htm]Wie verändert man Spiele oder Computer nach Wunsch? www.PC-Tutos.de[/url]
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

ich weiß nicht ob du sowas in der art meinst...

Code: Alles auswählen

import Tkinter as tk


def make_oval():
    global i, ov
    ov=c.create_oval(5+(4*i),5+(3*i),(5*i)+60,(i)+60,fill='white', outline='white')
    i+=1
    ov=c.create_oval(5+(4*i),5+(3*i),(5*i)+60,(i)+60, fill='gray70')
    if i != 27:
        win.after(500, make_oval)




win=tk.Tk()
frame = tk.Frame(win, width=500, height=400, bd=1)
frame.pack()

iframe5 = tk.Frame(frame, bd=2, relief=RAISED)
iframe5.pack(expand=1, fill=X, pady=10, padx=5)
c = tk.Canvas(iframe5, bg='white', width=340, height=100)
c.pack()
i=0
ov=c.create_oval(5+(4*i),5+(3*i),(5*i)+60,(i)+60, fill='gray70')
make_oval()
gleichmäßig bewegt.
Durchaus eine gleichmäßige bewegung, wenn auch keine geschmeidige ;)
Benutzeravatar
krisi12345
User
Beiträge: 205
Registriert: Mittwoch 4. März 2009, 16:56
Wohnort: Das schöne München
Kontaktdaten:

Für welche Python Version ist dieser Code gedacht wenn überhaupt?
Den Ich hab Ihn in Python 2.6-3.0 getestet und es kamen nur Fehler! :lol:
[url=http://www.pc-tutos.de/Tutorials/Tutorials.htm]Wie verändert man Spiele oder Computer nach Wunsch? www.PC-Tutos.de[/url]
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Hallo krisi12345 und Pascal !

Das Objekt nicht immer wieder neu malen, da sie bestehen bleiben und immer wieder gezeichnet werden. Über "tag="ball"" löschen und neu zeichnen.

Code: Alles auswählen

import Tkinter as tk


def make_oval(i):
    c.delete("ball")
    c.create_oval(5+(4*i),5+(3*i),(5*i)+60,(i)+60, fill='gray70', tag="ball")
    i+=1
    if i != 28:
        win.after(100, make_oval, i)


win=tk.Tk()
frame = tk.Frame(win)
frame.pack(ipady=5, ipadx=10)
c = tk.Canvas(frame, bg='white', width=340, height=100)
c.pack()
make_oval(1)
win.mainloop()
Gruß Frank
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Hallo !

Oder so:

Code: Alles auswählen

import Tkinter as tk

WIDTH = 800
HEIGHT = 500

class Ball(object):
    def __init__(self, root, canvas, width, height, ball_width, color, speed, 
            start_x, start_y, tag):
        self.width = width
        self.height = height
        self.canvas = canvas
        self.speed = speed
        self.direction_x = 2
        self.direction_y = 2
        self.tag = tag
        self.canvas.create_oval(start_x, start_y, start_x + ball_width, start_y 
            + ball_width, fill=color, tag=tag)
        
    def run(self):
        self.canvas.move(self.tag, self.direction_x, self.direction_y)
        position = self.canvas.coords(self.tag)
        if position[0] == 0:
            self.direction_x = 2
        if position[1] == 0:
            self.direction_y = 2
        if position[2] == self.width:
            self.direction_x = -2
        if position[3] == self.height:
            self.direction_y = -2
        self.canvas.after(self.speed, self.run)


root=tk.Tk()
canvas = tk.Canvas(root, bg='white', width=WIDTH, height=HEIGHT)
canvas.pack()
ball_1 = Ball(root, canvas, WIDTH, HEIGHT, 30, "blue", 5, 20, 300,
    "ball_1")
ball_1.run()
ball_2 = Ball(root, canvas, WIDTH, HEIGHT, 20, "red", 10, 220, 10,
    "ball_2")
ball_2.run()
root.mainloop()
Gruß Frank
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo krisi12345
krisi12345 hat geschrieben:Den Ich hab Ihn in Python 2.6-3.0 getestet und es kamen nur Fehler! Laughing
Da hast du recht in diesem Code-Stück gibt es zwei Fehler:
http://www.python-forum.de/post-137874.html#137874

Der erste in Zeile-19:
falsch:

Code: Alles auswählen

iframe5 = tk.Frame(frame, bd=2, relief=RAISED)
richtig:

Code: Alles auswählen

iframe5 = tk.Frame(frame, bd=2, relief=tk.RAISED)
Der zweite in Zeile-20:
falsch:

Code: Alles auswählen

iframe5.pack(expand=1, fill=X, pady=10, padx=5)
richtig

Code: Alles auswählen

iframe5.pack(expand=1, fill=tk.X, pady=10, padx=5)
Gruss wuf :wink:
Take it easy Mates!
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

ahh danke wuf ;)

die Fehler kommen daher, dass das ganze davor mit *-import war
Antworten