第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Tkinter畫布中移動球

在Tkinter畫布中移動球

哈士奇WWW 2019-10-22 21:13:13
這是一個非常基本的程序,我想用它來制作兩個移動的球,但實際上只有一個移動。我也嘗試了一些變化,但無法使第二個球移動。另一個相關的問題-有些人使用該move(object)方法來實現(xiàn)此目的,而另一些人則使用a delete(object),然后重新繪制它。我應該使用哪一個?為什么?這是我的代碼,僅使一個球運動/移動:from Tkinter import *class Ball:    def __init__(self, canvas, x1, y1, x2, y2):    self.x1 = x1    self.y1 = y1    self.x2 = x2    self.y2 = y2    self.canvas = canvas    self.ball = canvas.create_oval(self.x1, self.y1, self.x2, self.y2, fill="red")    def move_ball(self):        while True:            self.canvas.move(self.ball, 2, 1)            self.canvas.after(20)            self.canvas.update()# initialize root Window and canvasroot = Tk()root.title("Balls")root.resizable(False,False)canvas = Canvas(root, width = 300, height = 300)canvas.pack()# create two ball objects and animate themball1 = Ball(canvas, 10, 10, 30, 30)ball2 = Ball(canvas, 60, 60, 80, 80)ball1.move_ball()ball2.move_ball()root.mainloop()
查看完整描述

3 回答

?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

您絕對不應在GUI程序中放入無限循環(huán)-已經有無限循環(huán)在運行。如果您希望球獨立運動,只需退出循環(huán)并讓該move_ball方法在事件循環(huán)上對其本身進行新調用。這樣,您的球將繼續(xù)永遠移動(這意味著您應該在其中進行某種檢查以防止這種情況發(fā)生)


我已通過刪除無限循環(huán),稍微減慢了動畫速度以及對它們的移動方向使用了隨機值來對您的程序進行了一些修改。所有這些更改都在move_ball方法內部。


from Tkinter import *

from random import randint


class Ball:

    def __init__(self, canvas, x1, y1, x2, y2):

        self.x1 = x1

        self.y1 = y1

        self.x2 = x2

        self.y2 = y2

        self.canvas = canvas

        self.ball = canvas.create_oval(self.x1, self.y1, self.x2, self.y2, fill="red")


    def move_ball(self):

        deltax = randint(0,5)

        deltay = randint(0,5)

        self.canvas.move(self.ball, deltax, deltay)

        self.canvas.after(50, self.move_ball)


# initialize root Window and canvas

root = Tk()

root.title("Balls")

root.resizable(False,False)

canvas = Canvas(root, width = 300, height = 300)

canvas.pack()


# create two ball objects and animate them

ball1 = Ball(canvas, 10, 10, 30, 30)

ball2 = Ball(canvas, 60, 60, 80, 80)


ball1.move_ball()

ball2.move_ball()


root.mainloop()


查看完整回答
反對 回復 2019-10-22
?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

此功能似乎是罪魁禍首


def move_ball(self):

    while True:

        self.canvas.move(self.ball, 2, 1)

        self.canvas.after(20)

        self.canvas.update()

調用時,您故意將自己置于無限循環(huán)中。


ball1.move_ball()    # gets called, enters infinite loop

ball2.move_ball()    # never gets called, because code is stuck one line above


查看完整回答
反對 回復 2019-10-22
?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

它唯一移動一個,因為程序一次只讀取一個變量。如果將程序設置為在球到達某個位置(例如畫布的末端)時讀取,則可以對程序進行編碼以讀取下一行并觸發(fā)第二個球移動。但是,這一次只能移動一個。


您的程序實際上停留在行上:


ball1.move_ball()


而且它永遠不會行:


ball2.move_ball()


因為對循環(huán)的結束位置沒有限制。


否則,“ sundar nataraj”的回答將成功。


查看完整回答
反對 回復 2019-10-22
  • 3 回答
  • 0 關注
  • 791 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號