python開發(fā)的小球完全彈性碰撞游戲代碼
完成這個小球的完全彈性碰撞游戲靈感來自于:
下面是我花了一周下班時間所編寫的一個小球完全彈性碰撞游戲:
游戲初始化狀態(tài):
最下面的游標(biāo)和修改小球的移動速度
源碼部分:
#python tkinter
#python version 3.3.2
from tkinter import *
'''
判斷
兩個小球
{
圓心:A(x1,y1) 半徑:r X軸速度:Vax Y軸速度:Vay
圓心:B(x2,y2) 半徑:R X軸速度:Vbx Y軸速度:Vby
}
碰撞的條件是:
1.兩個小球的圓心距離不大于兩小球半徑之和(r+R),即:
{
(x2 - x1)^2 + (y2 - y1)^2 <= (r + R)^2
}
2.小球碰撞后,兩小球的數(shù)度交換,即:
{
tempVax = Vax
tempVay = Vay
Vax = Vbx
Vay = Vby
Vbx = tempVax
Vby = tempVay
或:
Vax = Vax + Vbx
Vbx = Vax - Vbx
Vax = Vax - Vbx
Vay = Vay + Vby
Vby = Vay - Vby
Vay = Vay - Vby
}
游戲規(guī)則:
五小球在畫布中移動,他們之間會產(chǎn)生碰撞,當(dāng)然小球和上下左右都會產(chǎn)生碰撞
碰撞后,小球會改變方向返回
而最下面的游標(biāo)則用于調(diào)節(jié)小球的移動速度,游標(biāo)的范圍是[-100, 100]
缺陷或BUG:
1.在修改游標(biāo)數(shù)據(jù)從而改變小球移動速度的時候,小球移動的距離得不到及時的更新
導(dǎo)致小球可能會逃離畫布
2.小球在運動的過程中,有時候也有可能逃離畫布
總結(jié):
完成這個游戲,花了一個星期的下班時間。在這個過程中不僅回去學(xué)習(xí)了高中的數(shù)學(xué)知識,
物理知識,很多東西都忘得差不多了,不過很快又學(xué)返回來了。
游戲其實很多就是數(shù)學(xué)問題。
游戲中還存在缺陷或BUG,希望志同道合者可以共同完善。
'''
__author__ = {'author' : 'Hongten',
'Email' : 'hongtenzone@foxmail.com',
'Blog' : 'http://www.cnblogs.com/hongten/',
'Created' : '2013-09-28',
'Version' : '1.0'}
class Pong(Frame):
def createWidgets(self):
## 畫布
self.draw = Canvas(self, width="5i", height="5i", bg='white')
## 游標(biāo)(控制小球移動速度,范圍:[-100, 100])
self.speed = Scale(self, orient=HORIZONTAL, label="ball speed",
from_=-100, to=100)
self.speed.pack(side=BOTTOM, fill=X)
#小球碰撞墻壁的范圍
self.scaling_right = 4.8
self.scaling_left = 0.2
#小球直徑
self.ball_d = 0.4
#游標(biāo)度數(shù)
self.scale_value = self.speed.get()
#放縮率
self.scaling = 100.0
#存放小球數(shù)組
self.balls = []
#存放小球x坐標(biāo)數(shù)組
self.ball_x = []
#存放小球y坐標(biāo)數(shù)組
self.ball_y = []
#存放小球x軸方向速度數(shù)組
self.ball_v_x = []
#存放小球y軸方向速度數(shù)組
self.ball_v_y = []
# 五個小球
self.ball = self.draw.create_oval("0.10i", "0.10i", "0.50i", "0.50i",
fill="red")
self.second_ball = self.draw.create_oval("0.70i", "0.70i", "1.10i", "1.10i",
fill='black')
self.three_ball = self.draw.create_oval("1.30i", "1.30i", "1.70i", "1.70i",
fill='brown')
self.four_ball = self.draw.create_oval("2.0i", "2.0i", "2.40i", "2.40i",
fill='green')
self.five_ball = self.draw.create_oval("3.0i", "3.0i", "3.40i", "3.40i",
fill='gray')
#把五個小球放入數(shù)組
self.balls.append(self.ball)
self.balls.append(self.second_ball)
self.balls.append(self.three_ball)
self.balls.append(self.four_ball)
self.balls.append(self.five_ball)
#第一個小球,即self.ball的圓心坐標(biāo)(self.x, self.y),這里進行了放縮,目的是為了
#在小球移動的過程中更加流暢
self.x = 0.3
self.y = 0.3
#第一個小球的速度方向
self.velocity_x = -0.2
self.velocity_y = 0.5
self.second_ball_x = 0.9
self.second_ball_y = 0.9
self.second_ball_v_x = 0.4
self.second_ball_v_y = -0.5
self.three_ball_x = 1.5
self.three_ball_y = 1.5
self.three_ball_v_x = -0.3
self.three_ball_v_y = -0.5
self.four_ball_x = 2.2
self.four_ball_y = 2.2
self.four_ball_v_x = 0.1
self.four_ball_v_y = -0.5
self.five_ball_x = 3.2
self.five_ball_y = 3.2
self.five_ball_v_x = 0.3
self.five_ball_v_y = 0.5
#更新小球的坐標(biāo)
self.update_ball_x_y()
self.draw.pack(side=LEFT)
def update_ball_x_y(self, *args):
'''更新小球的坐標(biāo),即把各個小球的圓心坐標(biāo)信息以及速度信息存放到數(shù)組中,
便于在后面循環(huán)遍歷的時候使用。'''
#第一個小球信息
self.ball_x.append(self.x)
self.ball_y.append(self.y)
self.ball_v_x.append(self.velocity_x)
self.ball_v_y.append(self.velocity_y)
self.ball_x.append(self.second_ball_x)
self.ball_y.append(self.second_ball_y)
self.ball_v_x.append(self.second_ball_v_x)
self.ball_v_y.append(self.second_ball_v_y)
self.ball_x.append(self.three_ball_x)
self.ball_y.append(self.three_ball_y)
self.ball_v_x.append(self.three_ball_v_x)
self.ball_v_y.append(self.three_ball_v_y)
self.ball_x.append(self.four_ball_x)
self.ball_y.append(self.four_ball_y)
self.ball_v_x.append(self.four_ball_v_x)
self.ball_v_y.append(self.four_ball_v_y)
self.ball_x.append(self.five_ball_x)
self.ball_y.append(self.five_ball_y)
self.ball_v_x.append(self.five_ball_v_x)
self.ball_v_y.append(self.five_ball_v_y)
def update_ball_velocity(self, index, *args):
'''更新各個小球速度信息,即小球碰撞到四周和另外的小球索要更新的速度信息'''
#游標(biāo)值
self.scale_value = self.speed.get()
#碰撞墻壁
if (self.ball_x[index] > self.scaling_right) or (self.ball_x[index] < self.scaling_left):
self.ball_v_x[index] = -1.0 * self.ball_v_x[index]
if (self.ball_y[index] > self.scaling_right) or (self.ball_y[index] < self.scaling_left):
self.ball_v_y[index] = -1.0 * self.ball_v_y[index]
'''
#TEST:
for n in range(len(self.balls)):
#print((self.ball_x[index] - self.ball_x[n])**2)
#print(round((self.ball_x[index] - self.ball_x[n])**2 + (self.ball_y[index] - self.ball_y[n])**2, 2))
print(round((self.ball_x[index] - self.ball_x[n])**2 + (self.ball_y[index] - self.ball_y[n])**2, 2) <= round(self.ball_d**2, 2))
'''
for n in range(len(self.balls)):
#小球碰撞條件,即:(x2 - x1)^2 + (y2 - y1)^2 <= (r + R)^2
if (round((self.ball_x[index] - self.ball_x[n])**2 + (self.ball_y[index] - self.ball_y[n])**2, 2) <= round(self.ball_d**2, 2)):
#兩小球速度交換
temp_vx = self.ball_v_x[index]
temp_vy = self.ball_v_y[index]
self.ball_v_x[index] = self.ball_v_x[n]
self.ball_v_y[index] = self.ball_v_y[n]
self.ball_v_x[n] = temp_vx
self.ball_v_y[n] = temp_vy
#print(self.ball_v_x, self.ball_v_y)
'''
#WRONG:
for n in range(len(self.balls)):
if (((self.ball_x[index] - self.ball_x[n])**2 + (self.ball_y[index] - self.ball_y[n])**2) <= self.ball_d**2):
#兩小球速度交換
self.ball_v_x[index] = self.ball_v_x[index] + self.ball_v_x[n]
self.ball_v_x[n] = self.ball_v_x[0] - self.ball_v_x[n]
self.ball_v_x[index] = self.ball_v_x[index] - self.ball_v_x[n]
self.ball_v_y[index] = self.ball_v_y[index] + self.ball_v_y[n]
self.ball_v_y[n] = self.ball_v_y[index] - self.ball_v_y[n]
self.ball_v_y[index] = self.ball_v_y[index] - self.ball_v_y[n]
print(self.ball_v_x, self.ball_v_y)
'''
def get_ball_deltax(self, index, *args):
'''獲取小球X軸坐標(biāo)移動距離并且更新小球的圓心X坐標(biāo),返回X軸所需移動距離'''
deltax = (self.ball_v_x[index] * self.scale_value / self.scaling)
self.ball_x[index] = self.ball_x[index] + deltax
return deltax
def get_ball_deltay(self, index, *args):
'''獲取小球Y軸坐標(biāo)移動距離并且更新小球的圓心Y坐標(biāo),返回Y軸所需移動距離'''
deltay = (self.ball_v_y[index] * self.scale_value / self.scaling)
self.ball_y[index] = self.ball_y[index] + deltay
return deltay
def moveBall(self, *args):
'''移動第一個小球,編號為:0,這是根據(jù)數(shù)組:self.balls確定的。'''
self.update_ball_velocity(0)
deltax = self.get_ball_deltax(0)
deltay = self.get_ball_deltay(0)
#小球移動
self.draw.move(self.ball, "%ri" % deltax, "%ri" % deltay)
self.after(10, self.moveBall)
def move_second_ball(self, *args):
self.update_ball_velocity(1)
deltax = self.get_ball_deltax(1)
deltay = self.get_ball_deltay(1)
self.draw.move(self.second_ball, "%ri" % deltax, "%ri" % deltay)
self.after(10, self.move_second_ball)
def move_three_ball(self, *args):
self.update_ball_velocity(2)
deltax = self.get_ball_deltax(2)
deltay = self.get_ball_deltay(2)
self.draw.move(self.three_ball, "%ri" % deltax, "%ri" % deltay)
self.after(10, self.move_three_ball)
def move_four_ball(self, *args):
self.update_ball_velocity(3)
deltax = self.get_ball_deltax(3)
deltay = self.get_ball_deltay(3)
self.draw.move(self.four_ball, "%ri" % deltax, "%ri" % deltay)
self.after(10, self.move_four_ball)
def move_five_ball(self, *args):
self.update_ball_velocity(4)
deltax = self.get_ball_deltax(4)
deltay = self.get_ball_deltay(4)
self.draw.move(self.five_ball, "%ri" % deltax, "%ri" % deltay)
self.after(10, self.move_five_ball)
def __init__(self, master=None):
'''初始化函數(shù)'''
Frame.__init__(self, master)
Pack.config(self)
self.createWidgets()
self.after(10, self.moveBall)
self.after(10, self.move_three_ball)
self.after(10, self.move_four_ball)
self.after(10, self.move_five_ball)
self.after(10, self.move_second_ball)
game = Pong()
game.mainloop()
===================================================
第二個版本 version.1.1: Edit by Hongten 2013-09-28 17:40
===================================================
修改記錄:
1.調(diào)整畫布大小
2.調(diào)整了小球的半徑,以及小球的速度初始值,小球初始圓心坐標(biāo)
3.游標(biāo)的范圍修改為:[-200, 200]
這些修改主要是針對上面的缺陷而進行的。
優(yōu)點:
1.小球移動的過程更直觀
2.小球的移動速度變小,但是可以根據(jù)游標(biāo)來修改小球移動速度
3.界面比之前更加友好
運行效果:
#python tkinter
#python version 3.3.2
from tkinter import *
'''
判斷
兩個小球
{
圓心:A(x1,y1) 半徑:r X軸速度:Vax Y軸速度:Vay
圓心:B(x2,y2) 半徑:R X軸速度:Vbx Y軸速度:Vby
}
碰撞的條件是:
1.兩個小球的圓心距離不大于兩小球半徑之和(r+R),即:
{
(x2 - x1)^2 + (y2 - y1)^2 <= (r + R)^2
}
2.小球碰撞后,兩小球的數(shù)度交換,即:
{
tempVax = Vax
tempVay = Vay
Vax = Vbx
Vay = Vby
Vbx = tempVax
Vby = tempVay
或:
Vax = Vax + Vbx
Vbx = Vax - Vbx
Vax = Vax - Vbx
Vay = Vay + Vby
Vby = Vay - Vby
Vay = Vay - Vby
}
游戲規(guī)則:
五小球在畫布中移動,他們之間會產(chǎn)生碰撞,當(dāng)然小球和上下左右都會產(chǎn)生碰撞
碰撞后,小球會改變方向返回
而最下面的游標(biāo)則用于調(diào)節(jié)小球的移動速度,游標(biāo)的范圍是[-100, 100]
缺陷或BUG:
1.在修改游標(biāo)數(shù)據(jù)從而改變小球移動速度的時候,小球移動的距離得不到及時的更新
導(dǎo)致小球可能會逃離畫布
2.小球在運動的過程中,有時候也有可能逃離畫布
總結(jié):
完成這個游戲,花了一個星期的下班時間。在這個過程中不僅回去學(xué)習(xí)了高中的數(shù)學(xué)知識,
物理知識,很多東西都忘得差不多了,不過很快又學(xué)返回來了。
游戲其實很多就是數(shù)學(xué)問題。
游戲中還存在缺陷或BUG,希望志同道合者可以共同完善。
修改記錄:
1.調(diào)整畫布大小
2.調(diào)整了小球的半徑,以及小球的速度初始值,小球初始圓心坐標(biāo)
3.游標(biāo)的范圍修改為:[-200, 200]
這些修改主要是針對上面的缺陷而進行的。
優(yōu)點:
1.小球移動的過程更直觀
2.小球的移動速度變小,但是可以根據(jù)游標(biāo)來修改小球移動速度
3.界面比之前更加友好
'''
__author__ = {'author' : 'Hongten',
'Email' : 'hongtenzone@foxmail.com',
'Blog' : 'http://www.cnblogs.com/hongten/',
'Created' : '2013-09-28',
'Version' : '1.1'}
class Pong(Frame):
def createWidgets(self):
#放縮率
self.scaling = 100.0
#畫布比例
self.canvas_width = 10
self.canvas_height = 5.6
## 畫布
self.draw = Canvas(self, width=(self.canvas_width * self.scaling),
height=(self.canvas_height * self.scaling),
bg='white')
## 游標(biāo)(控制小球移動速度,范圍:[-100, 100])
self.speed = Scale(self, orient=HORIZONTAL, label="ball speed",
from_=-200, to=200)
self.speed.pack(side=BOTTOM, fill=X)
#小球直徑
self.ball_d = 1.0
#小球碰撞墻壁的范圍
self.scaling_left = round(self.ball_d / 2, 1)
self.scaling_right = self.canvas_width - self.scaling_left
self.scaling_bottom = self.canvas_height - self.scaling_left
self.scaling_top = self.scaling_left
#游標(biāo)度數(shù)
self.scale_value = self.speed.get() * 0.1
#存放小球數(shù)組
self.balls = []
#存放小球x坐標(biāo)數(shù)組
self.ball_x = []
#存放小球y坐標(biāo)數(shù)組
self.ball_y = []
#存放小球x軸方向速度數(shù)組
self.ball_v_x = []
#存放小球y軸方向速度數(shù)組
self.ball_v_y = []
# 五個小球
self.ball = self.draw.create_oval("0.60i", "0.60i", "1.60i", "1.60i",
fill="red")
self.second_ball = self.draw.create_oval("2.0i", "2.0i", "3.0i", "3.0i",
fill='black')
self.three_ball = self.draw.create_oval("4.0i", "4.0i", "5.0i", "5.0i",
fill='brown')
self.four_ball = self.draw.create_oval("6.0i", "2.0i", "7.0i", "3.0i",
fill='green')
self.five_ball = self.draw.create_oval("8.0i", "3.0i", "9.0i", "4.0i",
fill='gray')
#把五個小球放入數(shù)組
self.balls.append(self.ball)
self.balls.append(self.second_ball)
self.balls.append(self.three_ball)
self.balls.append(self.four_ball)
self.balls.append(self.five_ball)
#第一個小球,即self.ball的圓心坐標(biāo)(self.x, self.y),這里進行了放縮,目的是為了
#在小球移動的過程中更加流暢
self.x = 1.1
self.y = 1.1
#第一個小球的速度方向
self.velocity_x = -0.2
self.velocity_y = 0.1
self.second_ball_x = 2.5
self.second_ball_y = 2.5
self.second_ball_v_x = 0.1
self.second_ball_v_y = -0.2
self.three_ball_x = 4.5
self.three_ball_y = 4.5
self.three_ball_v_x = -0.1
self.three_ball_v_y = -0.2
self.four_ball_x = 6.5
self.four_ball_y = 2.5
self.four_ball_v_x = 0.1
self.four_ball_v_y = -0.2
self.five_ball_x = 8.5
self.five_ball_y = 3.5
self.five_ball_v_x = 0.1
self.five_ball_v_y = 0.2
#更新小球的坐標(biāo)
self.update_ball_x_y()
self.draw.pack(side=LEFT)
def update_ball_x_y(self, *args):
'''更新小球的坐標(biāo),即把各個小球的圓心坐標(biāo)信息以及速度信息存放到數(shù)組中,
便于在后面循環(huán)遍歷的時候使用。'''
#第一個小球信息
self.ball_x.append(self.x)
self.ball_y.append(self.y)
self.ball_v_x.append(self.velocity_x)
self.ball_v_y.append(self.velocity_y)
self.ball_x.append(self.second_ball_x)
self.ball_y.append(self.second_ball_y)
self.ball_v_x.append(self.second_ball_v_x)
self.ball_v_y.append(self.second_ball_v_y)
self.ball_x.append(self.three_ball_x)
self.ball_y.append(self.three_ball_y)
self.ball_v_x.append(self.three_ball_v_x)
self.ball_v_y.append(self.three_ball_v_y)
self.ball_x.append(self.four_ball_x)
self.ball_y.append(self.four_ball_y)
self.ball_v_x.append(self.four_ball_v_x)
self.ball_v_y.append(self.four_ball_v_y)
self.ball_x.append(self.five_ball_x)
self.ball_y.append(self.five_ball_y)
self.ball_v_x.append(self.five_ball_v_x)
self.ball_v_y.append(self.five_ball_v_y)
def update_ball_velocity(self, index, *args):
'''更新各個小球速度信息,即小球碰撞到四周和另外的小球索要更新的速度信息'''
#游標(biāo)值
self.scale_value = self.speed.get() * 0.1
#碰撞墻壁
if (self.ball_x[index] > self.scaling_right) or (self.ball_x[index] < self.scaling_left):
self.ball_v_x[index] = -1.0 * self.ball_v_x[index]
if (self.ball_y[index] > self.scaling_bottom) or (self.ball_y[index] < self.scaling_top):
self.ball_v_y[index] = -1.0 * self.ball_v_y[index]
'''
#TEST:
for n in range(len(self.balls)):
#print((self.ball_x[index] - self.ball_x[n])**2)
#print(round((self.ball_x[index] - self.ball_x[n])**2 + (self.ball_y[index] - self.ball_y[n])**2, 2))
print(round((self.ball_x[index] - self.ball_x[n])**2 + (self.ball_y[index] - self.ball_y[n])**2, 2) <= round(self.ball_d**2, 2))
'''
for n in range(len(self.balls)):
#小球碰撞條件,即:(x2 - x1)^2 + (y2 - y1)^2 <= (r + R)^2
if (round((self.ball_x[index] - self.ball_x[n])**2 + (self.ball_y[index] - self.ball_y[n])**2, 2) <= round(self.ball_d**2, 2)):
#兩小球速度交換
temp_vx = self.ball_v_x[index]
temp_vy = self.ball_v_y[index]
self.ball_v_x[index] = self.ball_v_x[n]
self.ball_v_y[index] = self.ball_v_y[n]
self.ball_v_x[n] = temp_vx
self.ball_v_y[n] = temp_vy
#print(self.ball_v_x, self.ball_v_y)
'''
#WRONG:
for n in range(len(self.balls)):
if (((self.ball_x[index] - self.ball_x[n])**2 + (self.ball_y[index] - self.ball_y[n])**2) <= self.ball_d**2):
#兩小球速度交換
self.ball_v_x[index] = self.ball_v_x[index] + self.ball_v_x[n]
self.ball_v_x[n] = self.ball_v_x[0] - self.ball_v_x[n]
self.ball_v_x[index] = self.ball_v_x[index] - self.ball_v_x[n]
self.ball_v_y[index] = self.ball_v_y[index] + self.ball_v_y[n]
self.ball_v_y[n] = self.ball_v_y[index] - self.ball_v_y[n]
self.ball_v_y[index] = self.ball_v_y[index] - self.ball_v_y[n]
print(self.ball_v_x, self.ball_v_y)
'''
def get_ball_deltax(self, index, *args):
'''獲取小球X軸坐標(biāo)移動距離并且更新小球的圓心X坐標(biāo),返回X軸所需移動距離'''
deltax = (self.ball_v_x[index] * self.scale_value / self.scaling)
self.ball_x[index] = self.ball_x[index] + deltax
return deltax
def get_ball_deltay(self, index, *args):
'''獲取小球Y軸坐標(biāo)移動距離并且更新小球的圓心Y坐標(biāo),返回Y軸所需移動距離'''
deltay = (self.ball_v_y[index] * self.scale_value / self.scaling)
self.ball_y[index] = self.ball_y[index] + deltay
return deltay
def moveBall(self, *args):
'''移動第一個小球,編號為:0,這是根據(jù)數(shù)組:self.balls確定的。'''
self.update_ball_velocity(0)
deltax = self.get_ball_deltax(0)
deltay = self.get_ball_deltay(0)
#小球移動
self.draw.move(self.ball, "%ri" % deltax, "%ri" % deltay)
self.after(10, self.moveBall)
def move_second_ball(self, *args):
self.update_ball_velocity(1)
deltax = self.get_ball_deltax(1)
deltay = self.get_ball_deltay(1)
self.draw.move(self.second_ball, "%ri" % deltax, "%ri" % deltay)
self.after(10, self.move_second_ball)
def move_three_ball(self, *args):
self.update_ball_velocity(2)
deltax = self.get_ball_deltax(2)
deltay = self.get_ball_deltay(2)
self.draw.move(self.three_ball, "%ri" % deltax, "%ri" % deltay)
self.after(10, self.move_three_ball)
def move_four_ball(self, *args):
self.update_ball_velocity(3)
deltax = self.get_ball_deltax(3)
deltay = self.get_ball_deltay(3)
self.draw.move(self.four_ball, "%ri" % deltax, "%ri" % deltay)
self.after(10, self.move_four_ball)
def move_five_ball(self, *args):
self.update_ball_velocity(4)
deltax = self.get_ball_deltax(4)
deltay = self.get_ball_deltay(4)
self.draw.move(self.five_ball, "%ri" % deltax, "%ri" % deltay)
self.after(10, self.move_five_ball)
def __init__(self, master=None):
'''初始化函數(shù)'''
Frame.__init__(self, master)
Pack.config(self)
self.createWidgets()
self.after(10, self.moveBall)
self.after(10, self.move_three_ball)
self.after(10, self.move_four_ball)
self.after(10, self.move_five_ball)
self.after(10, self.move_second_ball)
game = Pong()
game.mainloop()
源碼下載:python_tkinter_pong(jb51.net).rar
- python貪吃蛇游戲代碼
- 14 個Python小游戲 源碼分享
- 二十種Python代碼游戲源代碼分享
- 13個有趣又好玩的Python游戲代碼分享
- python基礎(chǔ)練習(xí)之幾個簡單的游戲
- Python實現(xiàn)我的世界小游戲源代碼
- 用Python設(shè)計一個經(jīng)典小游戲
- 20行python代碼的入門級小游戲的詳解
- 用python制作游戲外掛
- Python寫的貪吃蛇游戲例子
- 基于Python實現(xiàn)的掃雷游戲?qū)嵗a
- python實現(xiàn)植物大戰(zhàn)僵尸游戲?qū)嵗a
- Python實現(xiàn)打磚塊小游戲代碼實例
- Python開發(fā)文字版密室逃脫游戲的實例(含代碼)
相關(guān)文章
使用OpenCV-python3實現(xiàn)滑動條更新圖像的Canny邊緣檢測功能
這篇文章主要介紹了使用OpenCV-python3實現(xiàn)滑動條更新圖像的Canny邊緣檢測功能,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12詳談Python基礎(chǔ)之內(nèi)置函數(shù)和遞歸
下面小編就為大家?guī)硪黄狿ython基礎(chǔ)之內(nèi)置函數(shù)和遞歸。小編覺得挺不錯的?,F(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06python執(zhí)行子進程實現(xiàn)進程間通信的方法
這篇文章主要介紹了python執(zhí)行子進程實現(xiàn)進程間通信的方法,涉及Python使用subprocess模塊操作進程的相關(guān)技巧,需要的朋友可以參考下2015-06-06python多線程多并發(fā)啟動appium服務(wù)的實現(xiàn)
使用Dos命令或者bat批處理來手動啟動appium服務(wù),啟動效率低下,本文主要介紹了python多線程多并發(fā)啟動appium服務(wù)的實現(xiàn),具有一定的 參考價值,感興趣的可以了解一下2024-02-02Python tkinter庫實現(xiàn)登錄注冊基本功能
Python自帶了tkinter模塊,實質(zhì)上是一種流行的面向?qū)ο蟮腉UI工具包 TK 的Python編程接口,提供了快速便利地創(chuàng)建GUI應(yīng)用程序的方法,下面這篇文章主要給大家介紹了關(guān)于tkinter庫制作一個簡單的登錄注冊小程序,需要的朋友可以參考下2022-12-12