2013-03-19 78 views
0

我真的想要愛上Python並且離開Matlab。是否有可能在Python中製作Matlab風格的圖形用戶界面?比較起來有多容易? (我以編程方式製作matlab GUI,不敢使用GUIDE)我可以在這些GUI中放入matplotlib圖形嗎? tk或wx(或其他)更好嗎?python可以使Matlab風格的圖形用戶界面

+3

你能提供一個你正在談論的GUI的例子嗎? – NightHallow 2013-03-19 18:01:20

+1

挖掘matplotlib ...它會生成圖形,你可以將它們顯示在任何地方。 – tdelaney 2013-03-19 18:07:16

+0

沒有任何截圖方便,但相當簡單的GUI與選項卡,表格和一些圖表。 – user1507844 2013-03-19 18:14:01

回答

1

wxPython有選項卡,網格或ListCtrls(即表),並支持matplotlib和PyPlot的圖形。你可以閱讀以下鏈接使用matplotlib:

要查看所有附帶的wxPython的小工具,去到www .wxpython.org並點擊左邊的下載鏈接。你會發現他們有一個獨立的Docs & Demo包,可以向你展示幾乎所有的小部件及其工作原理。

1

以前沒有用過Matlab,不確定它是否是GUI。但是如果你傾向於交互式地使用Python,你可能想試試iPython。使用Qt的Ipython可以爲您提供一個優雅的GUI。

+0

提問者想知道創建GUI的能力,而不是在GUI中使用python – 2013-03-19 19:19:07

1

對於您可能要檢查出的GUI中性小部件matplotlib提供簡單的接口,這裏的文檔 - http://matplotlib.org/api/widgets_api.html

下面是使用這些GUI中性部件繪製與被控制的可變參數的函數的一個簡單的例子由三個滑塊的小部件:

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


def hillfxn(x, B, K, n): 
    xn = float(x**n) 
    return (B * xn)/(K**n + xn) 


def draw_function(x, y, xlabel="Activator concentration (X)", 
        ylabel="Promoter activity"): 
    fig, ax = plt.subplots(1, 1, sharex=True) 
    plt.subplots_adjust(left=0.15, bottom=0.25) 
    lines = ax.plot(x, y) 
    ax.set_xlabel(xlabel) 
    ax.set_ylabel(ylabel) 
    ax.set_ylim(0,max(y)*1.1) 
    return fig, ax, lines 

def draw_interactive_controls(n, B, K): 
    axcolor = 'lightgoldenrodyellow' 
    axK = plt.axes([0.1, 0.01, 0.75, 0.03], axisbg=axcolor) 
    axB = plt.axes([0.1, 0.06, 0.75, 0.03], axisbg=axcolor) 
    axN = plt.axes([0.1, 0.11, 0.75, 0.03], axisbg=axcolor) 
    Nslider = Slider(axN, "$n$", 1, 10, valinit=n, valfmt='%1.3f') 
    Bslider = Slider(axB, "$\\beta$", 0, 20, valinit=B, valfmt='%1.3f') 
    Kslider = Slider(axK, "$K$", 0.01, 20, valinit=K, valfmt='%1.3f')  
    return Nslider, Bslider, Kslider 

def update_plot(val, x=None, lines=None, ax=None, 
       Nslider=None, Bslider=None, Kslider=None): 
    n = Nslider.val 
    B = Bslider.val 
    K = Kslider.val 
    y = [hillfxn(i, B, K, n) for i in x] 
    lines[0].set_ydata(y) 
    ax.set_ylim(0,max(y)*1.1) 
    pylab.draw() 


if __name__ == "__main__": 
    # initial values 
    B, K, n = 5, 5, 1 
    x= np.linspace(0,30,250) 
    y = [hillfxn(i, B, K, n) for i in x] 

    # setup initial graph and control settings 
    fig, ax, lines = draw_function(x,y) 
    Nslider, Bslider, Kslider = draw_interactive_controls(n, B, K) 

    # specify updating function for interactive controls 
    updatefxn = functools.partial(update_plot, x=x, lines=lines, ax=ax, 
        Nslider=Nslider, Bslider=Bslider, Kslider=Kslider) 

    Nslider.on_changed(updatefxn) 
    Bslider.on_changed(updatefxn) 
    Kslider.on_changed(updatefxn) 
    pylab.show() 

這將產生如下所示的接口:

matplotlib GUI neutral widgets