最近在为yolov5识别制作界面,因为用qt做的界面目前我还无法调用yolov5,因此采用pyqt5来是做界面,方便调用。本方法引入了第三个py文件来实现页面间跳转。
首先将要进行跳转的界面都导入到创建的第三个文件中(run.py)
from main import Ui_MainWindow as Main_ui
from pic import Ui_dialog as Pic_ui
其次
# 主窗口
class MainWindow(QtWidgets.QMainWindow, Main_ui):
switch_window1 = QtCore.pyqtSignal() # 跳转信号
def __init__(self):
super(MainWindow, self).__init__()
self.setupUi(self)
self.btn_pic.clicked.connect(self.goPic)
def goPic(self):
self.switch_window1.emit()
# 图片识别窗口
class PicWindow(QtWidgets.QDialog, Pic_ui):
switch_window5 = QtCore.pyqtSignal() # 跳转信号
def __init__(self):
super(PicWindow, self).__init__()
self.setupUi(self)
self.btn_main.clicked.connect(self.goPic_main)
def goPic_main(self):
self.switch_window5.emit()
再创建一个控制器实现页面跳转
# 利用一个控制器来控制页面的跳转
class Controller1:
def __init__(self):
self.pic = PicWindow()
self.main = MainWindow()
self.vidio = VidioWindow()
self.pic.hide()
self.main.hide()
self.vidio.hide()
# 跳转到 main 窗口
def show_main(self):
self.main.switch_window1.connect(self.show_pic)
self.main.show()
# 跳转到 pic窗口
def show_pic(self):
self.main.close()
self.pic.show()
此处想利用这一个控制器实现两个页面来回跳转,但是因为自身水平有限,此处需要再定义一个控制器实现子界面返回主界面
# 控制器2,实现子界面返回主界面
class Controller2:
def __init__(self, pic1):
self.pic = pic1.pic
self.main = pic1.main
#pic窗口返回main窗口
def show_pic_main(self):
self.pic.switch_window5.connect(self.show_main_)
self.pic.hide()
# 显示main窗口
def show_main_(self):
self.pic.close()
self.main.show()
再定义一个main函数
def main():
app = QtWidgets.QApplication(sys.argv)
controller1 = Controller1() # 控制器实例
controller2 = Controller2(controller1)
controller1.show_main() # 默认展示的是 hello 页面
controller2.show_pic_main()
sys.exit(app.exec_())
最后运行main函数就OK
成果展示:
![](https://i-blog.csdnimg.cn/blog_migrate/a388ba948d489642c79c9284e76fb101.png)
跳转到:
![](https://i-blog.csdnimg.cn/blog_migrate/afdf4b6d97c6588646588090aecbee8d.png)
并且点击返回主界面按钮就可以返回到主界面,此处就不做演示。
通过此方法还可实现多界面的来回跳转,此处只显示跳转到第三个界面,并且可以返回。
![](https://i-blog.csdnimg.cn/blog_migrate/f26002e4c3c4b2689e365bf3a54d33c0.png)
结束!