全部,
我正在撰寫一個代碼來在 Tkinter 視窗中移動多個球,我知道我們可以使用 oops/classes 輕松地做到這一點,但我想知道我們是否可以在沒有類的情況下做到這一點。我當前的代碼型別有效,但由于我在每次迭代后使用 for 回圈,其中一個球消失了。你能建議這里有什么問題嗎?以及如何讓多個物件或球在 Tkinter 視窗中移動。
from tkinter import *
import random
import time
tk = Tk()
WIDTH, HEIGHT = 600, 400
canvas = Canvas(tk, width=WIDTH, height=HEIGHT)
canvas.pack()
colors = ['red','green', 'blue', 'orange','magenta', 'grey', 'pink', 'yellow',
'dodgerblue','turquoise']
balls = []
for _ in range(10):
balls.append(canvas.create_oval(random.randrange(1,10),random.randrange(1,10),random.randrange(50,100), random.randrange(50,100), fill = random.choice(colors)))
while True:
x = random.randrange(1,5)
y = random.randrange(1,5)
for b in balls:
canvas.move(b,x,y)
pos = canvas.coords(b)
if pos[3] >=HEIGHT or pos[1] <=0:
y = -y
if pos[2] >=WIDTH or pos[0] <=0:
x = -x
tk.update()
time.sleep(0.03)
tk.mainloop()
uj5u.com熱心網友回復:
您的代碼正在運行。不幸的是,你沒有提到彈跳球。HEIGHT 和 WIDTH 對偏移螢屏沒有幫助。通過使用winfo_height()和winfo_width()將解決問題。至于我,我使用了一個使用類實體化模塊的彈跳球。并且canvas.move(b,x,y)總是放在if/else條件塊之后。球將偏移并回傳螢屏。球將隨機分開。
這里是片段代碼:
x = random.randrange(1,55)
y = random.randrange(1,55)
while True:
for b in balls:
#canvas.move(b,x,y)
pos = canvas.coords(b)
if pos[3] >=canvas.winfo_height() or pos[1] <=0:
y = -y
if pos[2] >=canvas.winfo_width()or pos[0] <=0:
x = -x
canvas.move(b,x,y)
tk.update()
time.sleep(0.01)
結果:

您可以將值從 55 更改為更高以滿足您的需要。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/527594.html
下一篇:如何用'FEED_URI和'FEED_FORMAT'替換scrapy2.X版中的'FEEDS'?使用PythonTkinter的GUI應用程式
