1、自述(不用看废话)
我在网上找了好久也有好多的界面跳转的例子看上去都很高级,但是我都看不懂,虽然按照他们的代码抄可以实现但是我不会怎么在他的基础上添加窗口。可能是因为我的技术太垃圾了。所以我已经了好久终于通过一遍一遍的测试终于实现的效果。
2、开发环境
1.PyCharm Community Edition .1.3 x64
2.Python 3.7.8
3.pytq5 5.15.9
3、编写思路
1、首先是创建窗口
2、创建按钮 QPushButton()
3、编写窗口的入口
4、导入窗口的类
5、在类下面编写跳转函数
首先是先显示窗口然后将上一个窗口关闭实现跳转
(网上有好几中方法
1.我看了他的但是我看不懂按照的实现了但是不知道这么在自己加上去【PyQt5】designer 页面点击按钮跳转页面
2.然后是他上面是跳转到下一个界面没有返回,这个是可以相互跳转可以返回到上一个界面Pyqt5页面间相互跳转)
但是我用的方法不一样写的代码少一些
4、创建窗口
我使用的是designer安装pyqt5时自带桌面软件
首先这个是主界面
我做了两个按钮目前我只使用一个“票务管理”按钮
第二个界面
操作过程:运行窗口出现后按下 -----》 “票务管理”----》跳出登录界面 -----》点击取消后 -----》又跳后主窗口
4、代码编写
(1)入口代码编写
首先入口代码的编写
就是创建designer生成窗口的代码导入主函数(这一步懂的可以跳过)
)
import sysfrom PyQt5.QtWidgets import QApplication,QMainWindowfrom PyQt5 import QtWidgets# 从ui转换的.py文件中导入Ui_MainWindow类,这个类就是主界面from hello import Ui_MainWindow as hello_ui #改行代码的意思是将hello中的Ui_MainWindow类转义为hello_uifrom login import Ui_MainWindow as login_ui#主窗口界面的类class Main_Window(QtWidgets.QMainWindow, hello_ui):def __init__(self):super(Main_Window, self).__init__()self.setupUi(self)#登录界面的类class login_Window(QtWidgets.QMainWindow, login_ui):def __init__(self):super(login_Window, self).__init__()self.setupUi(self)#主要运行程序入口if __name__ == '__main__':app = QApplication(sys.argv)window = Main_Window()window.show()sys.exit(app.exec_())
此时运行的结果是下面如图所示
按任何按钮没有反应的因为我们还没有加入按钮的槽函数(这个是重点)不会可以查一下
(2)使用按钮的槽函数
(1)首先先讲按钮这么使用
下面这行代码是“票务管理”的糟函数,意思是当按钮按下后触发括号内函数
queryButtons:代表的是绑定的按钮,这个我们可以在导入的ui的py文件中找到
clicked:代表的是按钮按下
connect:代表的是信号
括号内是我们在下面自己创建的函数gologin()
self.queryButtons.clicked.connect(self.gologin)
(2)按钮使用完整代码
import sysfrom PyQt5.QtWidgets import QApplication,QMainWindowfrom PyQt5 import QtWidgets# 从ui转换的.py文件中导入Ui_MainWindow类,这个类就是主界面from hello import Ui_MainWindow as hello_uifrom login import Ui_MainWindow as login_ui#主窗口界面的类class Main_Window(QtWidgets.QMainWindow, hello_ui):def __init__(self):super(Main_Window, self).__init__()self.setupUi(self)self.queryButtons.clicked.connect(self.gologin)def gologin(self):print("按钮被按下")if __name__ == '__main__':app = QApplication(sys.argv)window = Main_Window()window.show()sys.exit(app.exec_())
解析:基本入口就不说了,“self.queryButtons.clicked.connect(self.gologin)”这个函数放在ui初始化函数后面,但弹出窗口后,我们按下按钮则会执行下面的函数gologin(),输出"按钮被按下"
弹出窗口
按下后输出“按钮被按下”
(3)实现跳转效果
ok上面铺垫完成开始实现跳转效果
又上方我们已经知道按钮的触发方式
那么我们跳转思路是这样的:当按下按钮后先显示下一个窗口,然后关闭上一个窗口
import sysfrom PyQt5.QtWidgets import QApplication,QMainWindowfrom PyQt5 import QtWidgets# 从ui转换的.py文件中导入Ui_MainWindow类,这个类就是主界面from hello import Ui_MainWindow as hello_uifrom login import Ui_MainWindow as login_ui#主窗口界面的类class Main_Window(QtWidgets.QMainWindow, hello_ui):def __init__(self):super(Main_Window, self).__init__()self.setupUi(self)self.queryButtons.clicked.connect(self.gologin)def gologin(self):self.ui_login = login_Window()#实例登录界面类self.ui_login.show()#显示登录窗口self.close()#关闭上面窗口#登录界面的类class login_Window(QtWidgets.QMainWindow, login_ui):def __init__(self):super(login_Window, self).__init__()self.setupUi(self)self.pushButton.clicked.connect(self.gologin)def gologin(self):print("按钮被按下")#主要运行程序入口if __name__ == '__main__':app = QApplication(sys.argv)window = Main_Window()window.show()sys.exit(app.exec_())
安装上面的注释先实例一个登录窗口类,然后显示窗口,关闭上一个窗口
def gologin(self):self.ui_login = login_Window()#实例登录界面类self.ui_login.show()#显示登录窗口self.close()#关闭上面窗口
效果如下(由于没有下载录屏软件所以只能文章描述了)
按下“票务管理”
就跳到了登录界面
==========================================
跳回去也是一个道理
完整代码
import sysfrom PyQt5.QtWidgets import QApplication,QMainWindowfrom PyQt5 import QtWidgets# 从ui转换的.py文件中导入Ui_MainWindow类,这个类就是主界面from hello import Ui_MainWindow as hello_uifrom login import Ui_MainWindow as login_ui#主窗口界面的类class Main_Window(QtWidgets.QMainWindow, hello_ui):def __init__(self):super(Main_Window, self).__init__()self.setupUi(self)self.queryButtons.clicked.connect(self.gologin)def gologin(self):self.ui_login = login_Window()self.ui_login.show()self.close()#登录界面的类class login_Window(QtWidgets.QMainWindow, login_ui):def __init__(self):super(login_Window, self).__init__()self.setupUi(self)self.pushButton_2.clicked.connect(self.gologin)def gologin(self):self.ui_login2 = Main_Window()self.ui_login2.show()self.close()#主要运行程序入口if __name__ == '__main__':app = QApplication(sys.argv)window = Main_Window()window.show()sys.exit(app.exec_())
完毕