【问题标题】:Can python make Matlab style GUIs [closed]python可以制作Matlab风格的GUI [关闭]
【发布时间】:2013-03-19 17:59:20
【问题描述】:

我真的很想爱上 Python 并远离 Matlab。是否可以在 Python 中制作 Matlab 风格的 GUI?相比之下,这有多容易? (我以编程方式制作matlab GUI,不敢使用GUIDE)我可以将matplotlib 图形放在这些GUI 中吗? tk 或 wx(或其他)更适合这个吗?

【问题讨论】:

  • 你能提供一个你正在谈论的 GUI 的例子吗?
  • 深入 matplotlib... 它会生成图表,您可以在任何地方显示它们。
  • 手边没有任何屏幕截图,但相当简单的 GUI,带有选项卡、表格和一些图表。

标签: python matlab wxpython tkinter


【解决方案1】:

wxPython 具有选项卡、网格或 ListCtrls(即表格),并支持 matplotlib 和 PyPlot 用于图形。您可以在以下链接中阅读有关使用 matplotlib 的信息:

要查看 wxPython 包含的所有小部件,请访问 www.wxpython.org 并单击左侧的下载链接。您会发现他们有一个独立的 Docs & Demo 包,可以向您展示几乎所有小部件及其工作原理。

【讨论】:

    【解决方案2】:

    以前没用过Matlab,不知道是不是GUI。但如果您倾向于以交互方式使用 Python,您可能想尝试一下 iPython。带有 Qt 的 Ipython 可以为您呈现一个优雅的 GUI。

    【讨论】:

    • 提问者想知道创建 GUI 的能力,而不是在 GUI 中使用 python
    【解决方案3】:

    对于简单的界面,您可能需要查看 matplotlib 提供的 GUI 中性小部件,记录在这里 -- 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()
    

    这将产生如下界面:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      • 2015-01-02
      • 1970-01-01
      • 2015-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多