matlab的gui,怎么在同一个axes用两个button切换两张不同的图片

**

matlab的gui,怎么在同一个axes用两个button切换两张不同的图片

**

本人在学习图像处理的过程中遇到了这个问题,上网也没找到点啥解决办法,可能是我太菜了,不过还好,突然想到能解决的办法,好歹算是解决了,下面说一下我开始遇到的情况以及解决办法,如果有大佬能有更好的办法欢迎留言。

对了,我的matlab是r2017a不知道其他的会不会有这个问题

再ps,这个说的是matlab 的gui,如果是初学者可以看b站这个视频,讲的还挺不错的


一开始,我想用两个axes

在axes1中imshow(‘01.jpg’),然后再axes2中imshow(‘02.jpg’),并且将axes2的visible调整为off,这样从表面上就只能看到axes1,然后就可以用button来回切换axes1和axes2的visible属性,让一个可见一个不可见

经过测试发现,button回调函数写的是正确的,但是就是不能实现来回切换功能,然后我把axes2放空,发现axes1里在imshow之后,imshow的图片会跑到最顶层来,然后不断按下button会让axes2里的空坐标系出现在图片的后方。就和word里面的图片置于顶层一样,但关键是我还找不到能调整顶层底层的属性

后来还想了干脆在同一个坐标系里删掉重画算了,反正自己用的,但是又想了想太浪费运算了,还要耗时间等个1、2秒

再然后终于,终于想到了个还算可以用的办法!!!

-------------------------------------------正文开始----------------------------------------

两个axes既然不能来回切换,那就搞两个uipanel来回切换

原理和axes改visible是一样的,我主要想说的是搞这个的时候的注意事项

显然首先需要两个一样大的panel和axes,然后把他们挪到位置一致就好,那么问题来了,这么简单的事情为什么我还要提?因为我自己踩到了坑

问题的表现是回调函数和visible顺序之类完全正确的时候仍然没法正常工作。

原因出在创建第二个panel的时候,因为第一个panel太大了,所以新建第二个panel的时候照着第一个比划,然后等第二个一样大之后发现,uipanel2的parent居然是uipanel1,然后就导致把uipanel1隐藏的时候连带它的子元素藏起来了,所以怎么切换都没有用,只能切换出来个uipanel1里的图片还有空白的情况

matlab的gui,怎么在同一个axes用两个button切换两张不同的图片

可以右键随便哪看这个对象浏览器
matlab的gui,怎么在同一个axes用两个button切换两张不同的图片
matlab的gui,怎么在同一个axes用两个button切换两张不同的图片
里面是这个亚子的,之前我的uipanel2就是被包在了uipanel1里面导致问题

解决办法:要两个一模一样的话就复制粘贴好了,然后把复制粘贴的那个缩小,缩小到能在你画布的空白处放下,这样放过去它的parent就是figure了,比如下面这个,最右边那个小坨就是第二个了uipanel了
matlab的gui,怎么在同一个axes用两个button切换两张不同的图片
然后选中那个小panel,用键盘的上下左右移动到合适的位置,然后再拉大还原回去就好了


这么简单个问题,还搞了我大半天,搞出来了是简单,没搞出来是真的头大,有大佬还知道怎么解决imshow的始终在顶层,所在axes无法被visible off的话欢迎留言评论