2012-06-03 211 views
5

好的..一个python程序的输出显示在一个Tkinter窗口中,该窗口分开打开。我想要做的是在浏览器中嵌入此窗口。代码如下:如何将python tkinter窗口嵌入到浏览器中?

import numpy as np 
import matplotlib 
import matplotlib.cbook as cbook 
import matplotlib.image as image 
import matplotlib.pyplot as plt 

datafile = cbook.get_sample_data('logo2.png', asfileobj=False) 

print 'loading', datafile 

im = image.imread(datafile) 

im[:,:,-1] = 0.5 # set the alpha channel 

fig = plt.figure() 

ax = fig.add_subplot(111) 

ax.plot(np.random.rand(20), '-o', ms=20, lw=2, alpha=0.7, mfc='orange') 

ax.grid() 

fig.figimage(im, 10, 10) 

plt.show() 

考虑到所有变量都是从浏览器窗体字段中给出的输入参数。请帮忙!! :-)

+0

http://matplotlib.sourceforge.net/faq/howto_faq.html#matplotlib-in-a-web-application-server and http://stackoverflow.com/questions/5515278/plot-matplotlib-on-the -web可能会有所帮助。 – Ken

+0

这有点有用,谢谢ken。然而,我确实需要的是tkinter的交互功能(默认情况下会出现在web上)以及生成的图片。我怎样才能做到这一点? :-) – khan

+1

你需要的是一个在浏览器中工作的(标准)后端。我不知道任何这样的后端,但我不希望tKinter成为其中之一... –

回答

5

基于Joe Kington's answer到类似的问题,后端mplh5canvas可能是你在找什么。适应你的示例代码与它合作,

import numpy as np 
import matplotlib 
import mplh5canvas 

matplotlib.use('module://mplh5canvas.backend_h5canvas') 

import matplotlib.cbook as cbook 
import matplotlib.image as image 
import matplotlib.pyplot as plt 


fig = plt.figure() 

ax = fig.add_subplot(111) 

ax.plot(np.random.rand(20), '-o', ms=20, lw=2, alpha=0.7, mfc='orange') 

ax.grid() 

plt.show(open_plot=True) 

这似乎与你正在寻找的那种互动很好地工作,甚至允许动画。话虽如此,它不支持每个浏览器,如installation wiki page中所述。如果限制使用Chrome,Safari或Opera(在这种情况下通过一些配置,请检查该页面)是可以接受的,那么它应该适合你,尽管可能也需要一些实验。

+0

亚瑟,感谢百万兄弟。我在本地实现了它,并且它工作正常(虽然在打开chrome选项卡之前需要几秒钟)。但是,当上传到服务器上并尝试通过网页(使用php exec()函数执行python文件)运行时,它不起作用,即不能打开我的chrome中的结果选项卡。有什么建议么? – khan