2017-05-27 128 views
-1

我用mathplotlib寫了一個python腳本。 我有3個滑塊「r1」,「r2」,「dist」。Python:用交互式GUI繪製圓圈?

R1爲圓半徑1. R2爲圓半徑2. DIST是圓1和2

現在我想打印兩個圓之間的距離。 1.圓圈半徑應該有滑塊r1的值。 2.圓圈半徑應該有滑塊r2的值。 x軸上兩個圓之間的距離應該是滑塊dist的值。

對我來說,繪製這些東西是沒有問題的。 但是當我移動滑塊時,圓圈不會移動/更改。

我該如何實現2個Python互動圈,我可以用滑塊管理半徑和距離?

我有什麼至今:

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.widgets import Slider, Button, RadioButtons 

fig, ax = plt.subplots() 
plt.subplots_adjust(left=0.25, bottom=0.25) 
t = np.arange(0.0, 1.0, 0.001) 
plt.axis([0, 100, 0, 100]) 

axcolor = 'lightgoldenrodyellow' 
sl1 = plt.axes([0.25, 0.15, 0.65, 0.03], facecolor=axcolor) 
sl2 = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor=axcolor) 
sl3 = plt.axes([0.25, 0.05, 0.65, 0.03], facecolor=axcolor) 

slider_r1 = Slider(sl1, 'r1', 0.0, 50.0, 25) 
slider_r2 = Slider(sl2, 'r2', 0.0, 50.0, 25) 
slider_d = Slider(sl3, 'dist', 0.0, 50.0, 25) 



def update(val): 
    print("\nr1: ",slider_r1.val) 
    print("r2: ",slider_r2.val) 
    print("dist: ", slider_d.val) 

slider_r1.on_changed(update) 
slider_r2.on_changed(update) 
slider_d.on_changed(update) 

plt.show() 
+0

我看不出有任何的代碼來畫圈圈。 – HYRY

回答

1

一個圈可以通過circle = plt.circle((x,y), radius)創建和使用ax.add_patch(cicle)添加到軸。

它的半徑可以通過circle.set_radius更新其中心可設置爲circle.center = x,y(遺憾的是它不具有set_positionset_xy。方法像其他藝術家)。

完整的示例:

import matplotlib.pyplot as plt 
from matplotlib.widgets import Slider, Button, RadioButtons 

fig, ax = plt.subplots() 
plt.subplots_adjust(left=0.25, bottom=0.25) 
ax.axis([0, 100, 0, 100]) 
ax.set_aspect("equal") 

axcolor = 'skyblue' 
sl1 = plt.axes([0.25, 0.15, 0.65, 0.03], facecolor=axcolor) 
sl2 = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor=axcolor) 
sl3 = plt.axes([0.25, 0.05, 0.65, 0.03], facecolor=axcolor) 

slider_r1 = Slider(sl1, 'r1', 0.0, 50.0, 25) 
slider_r2 = Slider(sl2, 'r2', 0.0, 50.0, 25) 
slider_d = Slider(sl3, 'dist', 0.0, 100.0, 50) 

circ1 = plt.Circle((25,50), 25, ec="k") 
circ2 = plt.Circle((75,50), 25, ec="k") 
ax.add_patch(circ1) 
ax.add_patch(circ2) 

def update(val): 
    r1 = slider_r1.val 
    r2 = slider_r2.val 
    d = slider_d.val 
    circ1.center = 50-d/2., 50 
    circ2.center = 50+d/2., 50 
    circ1.set_radius(r1) 
    circ2.set_radius(r2) 
    fig.canvas.draw_idle() 

slider_r1.on_changed(update) 
slider_r2.on_changed(update) 
slider_d.on_changed(update) 

plt.show() 

enter image description here