2015-09-30 18 views
5

Gần đây tôi bắt đầu khám phá việc phát triển giao diện người dùng trong Qt Designer và chỉnh sửa chúng thông qua PyQt. Mọi thứ diễn ra khá mượt mà, nhưng hiện tại tôi đang cố gắng giải quyết vấn đề sau:Thanh công cụ điều hướng Matplotlib: xóa "Chỉnh sửa đường cong và thông số trục"

Tôi đã chèn một tiện ích MatplotLib qua Qt Designer và quản lý để vẽ các thanh ngang khá tốt bằng barh. Tiếp theo tôi đã cố gắng và quản lý thành công để chèn một NavigationToolBar chức năng thông qua matplotlib.backends.backend_qt4agg.NavigationToolbar2QT

Sau đó, theo chủ đề này (và những cái tương tự) tôi đã chỉnh sửa nút nào tôi muốn hiển thị trên thanh công cụ ... How to modify the navigation toolbar easily in a matplotlib figure window?

Tính năng này hoạt động tốt cho mọi nút ngoại trừ nút cuối cùng, với bản vẽ hộp kiểm mô tả "Chỉnh sửa đường cong và thông số trục". Trong trường hợp cụ thể này, tôi thực sự muốn loại bỏ nút này, bởi vì nó liên tục thay đổi kích thước cốt truyện khi di chuyển chuột và trong trường hợp này tôi không cần nút này.

tôi đã không tìm thấy bất kỳ chủ đề được nêu ra thảo luận nút thanh công cụ đặc biệt này (chỉ này một matplotlib: Qt4Agg toolbar's irritating bug)

Các mã được sử dụng để chèn các thanh công cụ và hiện chỉnh sửa nút trông giống như sau:

from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT 

class currentUI(QtGui.QWidget): 

    def __init__(self): 
     super(currentUI,self).__init__() 
     (...) 
     uic.loadUi('portfolioManager.ui',self) 
     self.initUI() 
     (...) 
    def initUI(self):   
     self.setWidgetsPropertiesAndActions() 
    (...) 
    def setWidgetsPropertiesAndActions(self): 
     (...) 
     self.navi_toolbar=NavigationToolbar(self.mplwidgetExposures, self) 
     self.LayoutPlot.addWidget(self.navi_toolbar) 
(...) 
class NavigationToolbar(NavigationToolbar2QT): 

    toolitems = [t for t in NavigationToolbar2QT.toolitems if 
       t[0] in ('Home','Pan', 'Zoom', 'Save','Subplots')] 

Việc này đã nhúng thành công thanh công cụ, nhưng nút "chỉnh sửa" vẫn còn.

Cảm ơn rất nhiều vì mọi thông tin chi tiết. Trân

Trả lời

5

Bạn có thể loại bỏ nó bằng cách thêm dòng sau vào lớp NavigationToolbar bạn

actions = self.findChildren(QtGui.QAction) 
    for a in actions: 
     if a.text() == 'Customize': 
      self.removeAction(a) 
      break 

Lý do bạn không thể loại bỏ nút này đặc biệt bằng cách sửa đổi toolitems là bởi vì nó được thêm vào thanh công cụ riêng biệt sau khi tất cả các toolitems mục đã được thêm.

for text, tooltip_text, image_file, callback in self.toolitems: 
     if text is None: 
      self.addSeparator() 
     else: 
      a = self.addAction(self._icon(image_file + '.png'), 
            text, getattr(self, callback)) 
      self._actions[callback] = a 
      if callback in ['zoom', 'pan']: 
       a.setCheckable(True) 
      if tooltip_text is not None: 
       a.setToolTip(tooltip_text) 

    if figureoptions is not None: 
     a = self.addAction(self._icon("qt4_editor_options.png"), 
          'Customize', self.edit_parameters) 
     a.setToolTip('Edit curves line and axes parameters') 
+0

Cảm ơn rất nhiều vì thông tin chi tiết của bạn! Theo ý tưởng của bạn, tôi đã tạo ra một hàm trong lớp con NavigationToolbar để loại bỏ các hành động và làm việc tuyệt vời. Chúc mừng! –

Các vấn đề liên quan