2012-10-02 21 views
10

Matplotlib'de gezinme araç çubuğunu değiştirmek için aşağıdaki gibi bir şey yapmak mümkün mü? aracılığıyla alet çubuğu değiştirin tbar = fig.navtbar Bir matplotlib şekil penceresinde gezinme araç çubuğunu kolayca nasıl değiştirebilirim?

  • : Sadece tarafından, daha iyisi tbar = fig.get_navigation_toolbar(), ya: ile, fig = figure()
  • navigasyon aracı-bar referans alın:
    1. ile, bir figür penceresini üret/add/silme gibi, tbar referans böyle bir şey ile bir düğme düzenleyin:
          tbar.add_button(<a Button object>);
          tbar.remove_button(a reference to a button);
          tbar.edit_button(a reference to a button);
    2. Güncelleme ile şekil: fig.canvas.draw()

    Çok teşekkür ederim.

  • +0

    http://dalelane.co.uk/blog/?p=778 Yardımda bulunur mu? – halex

    +0

    Bu çözümü daha önce gördüm. Mümkünse daha basit bir şey arıyorum.Navigasyon araç çubuğu nesnesini doğrudan düzenlemenin mümkün olmayacağına dair bir fikrim var, bu yüzden bahsettiğiniz çözüme yerleşmem gerekebilir. Teşekkürler :-) – JBT

    cevap

    16

    İstenmeyen araç çubuğu öğelerini kaldırmayı bulduğum yol, bir GTK uygulamasında başlatılan ve kullanılan bir alt sınıf oluşturmaktır. Şekil, ŞekilCanvas ve NavigationToolbar nesnelerini el ile oluşturduğumdan, bu en kolay yoldu. Eğer özel düğmeler oluşturmak istiyorsanız

    class NavigationToolbar(NavigationToolbar2GTKAgg): 
        # only display the buttons we need 
        toolitems = [t for t in NavigationToolbar2GTKAgg.toolitems if 
           t[0] in ('Home', 'Pan', 'Zoom', 'Save')] 
    

    , sen backend_bases içinde NavigationToolbar2 tanımı konusunda bir göz atmalısınız. Kendi girişlerinizi kolayca toolitems listesine ekleyebilir ve araç çubuğu alt sınıfınızda uygun geri arama işlevlerini tanımlayabilirsiniz.

    +0

    +1: wx için, iyi bir cevap http://dalelane.co.uk/blog/?p=778 – tom10

    +0

    iddialı çözüm! – SAAD

    7

    MPL 1.2.1 ile, figure.canvas.toolbar aracılığıyla standart bir MPL figürünün gezinme araç çubuğunun bir işleyicisini almak mümkündür. Önceki sürümlerden emin değilim.

    En azından QT arka ucuyla, QT yöntemi .addWidget()'u kullanarak gezinme araç çubuğuna isteğe bağlı widget'lar eklemek mümkündür. Bence diğer arka planlar benzer yöntemler kullanarak çalışacak, ama ben onları test etmedim. İşte

    bir MPL figürü başlığını değiştirmek için gezinme araç çubuğuna bir QLineEdit() ekleyen bir çalışma örneği (QT arka uç kullanarak) (daha sonra test()run -i ... ile ipython (PyLab) çalıştırmak başlatmak) olduğu:

    from PySide import QtGui, QtCore 
    
    def test(): 
        plot([1,2,3], lw=2) 
        q = qt4_interface(gcf()) 
        return q # WARNING: it's paramount to return the object otherwise, with 
           # no references, python deletes it and the GUI doesn't respond! 
    
    class qt4_interface: 
        def __init__(self,fig): 
         self.fig = fig 
    
         toolbar = fig.canvas.toolbar 
         self.line_edit = QtGui.QLineEdit() 
         toolbar.addWidget(self.line_edit) 
         self.line_edit.editingFinished.connect(self.do_something) 
    
        def do_something(self, *args): 
         self.fig.axes[0].set_title(self.line_edit.text()) 
         self.fig.canvas.draw() 
         #f = open('l','a'); f.write('yes\n'); f.flush(); f.close() 
    
    0

    Yukarıdaki torfbotl çözümüne ek olarak, sonunda (yeşil onay işaretli olan) fazladan bir düğme olabilir. alt sınıf yapıcısı içinde hafifletilebilir

    :

    from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar 
    
    class PanOnlyToolbar(NavigationToolbar): 
        # only display the buttons we need 
        toolitems = [t for t in NavigationToolbar2GTKAgg.toolitems if 
           t[0] in ("Pan",)] 
    
        def __init__(self, *args, **kwargs): 
         super(PanOnlyToolbar, self).__init__(*args, **kwargs) 
         self.layout().takeAt(1) #or more than 1 if you have more buttons 
    
    1

    önceki cevaplar çalışmak ama çok arka uç özgüdür. Bu daha basit bir çözüm, NavigationToolbar2 alt sınıfının, bu diğer yanıtta olduğu gibi, alt sınıf olarak yapılmasıdır: Matplotlib/Tkinter - customizing toolbar tooltips Burada amaç, araç ipuçlarını değiştirmek, ancak bir düğmeyi eklemek veya çıkarmak aynı derecede önemsizdir.

    İlgili konular