python-3.x - Pyqt5 中嵌入的 Matplotlib 导航工具栏
问题描述
我正在尝试将 NavigationToolbar 添加到我的工具中。我设法将它嵌入到一个小部件中,但只有“保存图形”选项(以绿色突出显示)有效。缩放和编辑选项(红色)被禁用。我不明白为什么某些功能在保存选项起作用时不起作用。谢谢你。
到目前为止我的代码:
class Ui_MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(Ui_MainWindow, self).__init__(parent)
self.setupUi(self)
self.btn_map_country.clicked.connect(self.map_country)
self.graph2 = MyCanvas()
self.gridLayout_3.addWidget(self.graph2, 0, 2, 1, 1)
def map_country(self):
self.graph2.figure.clf()
self.axes = self.graph2.figure.add_subplot(111)
map = Basemap(projection='cyl',lon_0=0,resolution='l')
map.readshapefile('shape_test', 'state')
countries = ['Australia', 'Canada', 'France', 'Russia']
patches = []
patches2 = []
for info, shape in zip(map.state_info, map.state):
if info['ADMIN'] in countries:
patches.append( Polygon(np.array(shape), True) )
else:
patches2.append( Polygon(np.array(shape), True) )
self.axes.add_collection(PatchCollection(patches, facecolor= '#81F781', edgecolor='k', linewidths=0.5, zorder=2))
self.axes.add_collection(PatchCollection(patches2, facecolor= '#DAD3D1', edgecolor='k', linewidths=0.5, zorder=2))
map.drawmapboundary(fill_color='#A9D0F5')
self.graph2.draw()
class MyCanvas(FigureCanvas):
def __init__(self, *args, **kwargs):
self.figure = plt.figure()
FigureCanvas.__init__(self, self.figure)
self.figure.patch.set_facecolor("None")
self.canvas = FigureCanvas(self.figure)
toolbar = NavigationToolbar(self.canvas, self)
解决方案
您没有保存对工具栏的引用,所以我猜它正在被垃圾收集。
将工具栏实例化行更改为:
self.toolbar = NavigationToolbar(self.canvas, self)
编辑:考虑遵循这个堆栈溢出答案的模式(明确地将工具栏和画布添加到 Qt 布局等)。
推荐阅读
- memory - 进程究竟是如何存储在内存中的?
- inno-setup - 如何使用 inno setup 覆盖第三方安装目录
- excel - 从模板工作表创建新工作表
- swiftui - ToolbarItem 内的按钮无法关闭工作表
- python - 如何取 numpy 数组中所有非零条目的倒数
- python - 创建具有多个值的参数的函数,例如 csv 中的行
- output - 在 Qbasic 中运行程序时,有没有办法保存输出?
- javascript - 状态码为 404 的动态路由 nextjs
- python - 如何并行化列绑定的函数?
- flutter - How to convert bytes into image in Flutter?