首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tkinter画布绘制一个mayavi.mlab图

Tkinter画布绘制一个mayavi.mlab图
EN

Stack Overflow用户
提问于 2015-12-08 06:05:42
回答 1查看 811关注 0票数 1

我一直致力于可视化使用mayavi.mlab生成的三维图形,然后使用Tkinter生成一个GUI窗口,以改变我的3D图的一些参数(确切地说是2)。我的问题是我无法连接Tkinter的画布来主持我的mayavi情节。更具体的是:我为我的3D计算创建了一个类,为GUI创建了一个类。

代码语言:javascript
复制
import numpy as np
from mayavi import mlab
from Tkinter import *
import tkMessageBox as msg
class 3Dplot_calc:

    x,y,z = np.mgrid[-10:10:150j,-10:10:150j,-10:10:150j]

    def __init__(self, R, I):
      self.R = R
      self.I = I

中间有一系列的方法来帮助计算有用的部分。

代码语言:javascript
复制
class GUI:    

    def __init__(self,master):    
        frame = Frame(master)
        frame.pack()
        self.Set_Figure(frame)
        self.Inputs(frame)

    def Set_Figure(self,frame):
        self.fig = mlab.figure(1, size=(500,500))
        ### i need to attach it to the canvas somehow and make it upgrade

我被困在这里了!GUI类继续为R和I、一些其他按钮、一个绘图按钮定义滑块,并定义它们在框架中的位置。有关部分如下:

代码语言:javascript
复制
    def Inputs(self,frame):
        input_frame = Frame(frame)
        input_frame.grid(column=0, row=0)

        #Add Sliders
        self.slR = Scale(input_frame, from_=1.0, to=5.0, orient=HORIZONTAL)
        self.slR.set(1.0)

        self.slI = Scale(input_frame, from_=-5.0, to=5.0, orient=HORIZONTAL)
        self.slI.set(1.0)

        #Add Plot Button
        self.plot_button = Button(input_frame, text='PLOT', command = self.Generate_Values)

    def Generate_Values(self):    
        R = int(self.slR.get())
        I = float(self.slI.get())

        a = 3Dplot_calc(R,I)
        Bx,By,Bz = a.Bx, a.By, a.Bz #Those are the useful methods 
        field = mlab.pipeline.vector_field(Bx, By, Bz)
        magnitude = mlab.pipeline.extract_vector_norm(field)
        contours = mlab.pipeline.iso_surface(magnitude,contours=3)

        field_lines = mlab.pipeline.streamline(magnitude, seedtype='line',
                                    integration_direction='both')       
        self.canvas.show()
root = Tk()
gui = GUI(root)
root.mainloop() 

三维绘图类本身工作很好。我得到的错误是: GUI实例没有属性‘画布’。我可以编辑这篇文章,如果需要的话,我可以把我的完整代码放进去。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-08 13:34:12

出于根本原因,我认为这是不可能的。一个程序只能有一个GUI后端运行事件循环,IIUC,目前版本的Mayavi只支持Qt (好)和Wx (有点)后端,而不是Tkinter。我建议使用带有Qt后端的TraitsUI来改变您的参数,而不是TKinter。参见ui.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34149104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档