pyqt5的页面跳转

前言:
正在学习python,学到了文件读取操作,想用pyqt5实现一下,发现我对于pyqt5还是不够了解。
现在记录一下我用pyqt5实现页面跳转的过程
方便以后查阅
pycharm使用pyqt5的话建议解释器用python3.7
由于目前我的水平还是太菜,所以我搞的这个也不太高级吧。。。

我的做法:

首先要在每个要页面类下面加一行

switch_win = QtCore.pyqtSignal()

这个好像是什么跳转信号来着
加了以后再往类里面加一个函数(函数名随便)

def tobtn3(self):
        self.switch_win3.emit()

我代码中的其中一个类如下

class win2(QWidget):

    switch_win3 = QtCore.pyqtSignal()
    def __init__(self):
        super().__init__()
        self.ui = uic.loadUi("./win2.ui")
        self.ui.pushButton.clicked.connect(self.write1)
        self.ui.pushButton_3.clicked.connect(self.tobtn3)
        # 上面这个就是把那个按钮和跳转函数绑定

    def write1(self):
        text = self.ui.textEdit.toPlainText()
        fp = open("./test.txt", 'a')
        fp.write(text)
        fp.write("\n")
        self.ui.textEdit.clear()
        fp.close()

    def tobtn3(self):
        self.switch_win3.emit()

由于我太菜,有些不懂一些东西,所以只好在main文件里整几个类了
如以下:

class win1(QWidget):
    switch_win2 = QtCore.pyqtSignal()
    def __init__(self):
        super().__init__()
        self.ui = uic.loadUi("./win1.ui")
        self.ui.pushButton.clicked.connect(self.todobtn1)


    def todobtn1(self):
        self.switch_win2.emit()
        self.ui.close()

class win2(QWidget):

    switch_win3 = QtCore.pyqtSignal()
    def __init__(self):
        super().__init__()
        self.ui = uic.loadUi("./win2.ui")
        self.ui.pushButton.clicked.connect(self.write1)
        self.ui.pushButton_3.clicked.connect(self.tobtn3)

    def write1(self):
        text = self.ui.textEdit.toPlainText()
        fp = open("./test.txt", 'a')
        fp.write(text)
        fp.write("\n")
        self.ui.textEdit.clear()
        fp.close()

    def tobtn3(self):
        self.switch_win3.emit()

class win3(QWidget):
    def __init__(self):
        super().__init__()
        self.ui = uic.loadUi("./win3.ui")
        self.read1()

    def read1(self):
        fp = open("./test.txt", 'r')
        for line in fp:
            self.ui.textBrowser.append(line)
        fp.close()


在这里的话,我查阅到的方法是单独弄个controller
当然这个我也不是很懂,如下(后面有具体讲解):

class controller:

    def __init__(self):
        pass

    def show_win1(self):
        self.win1 = win1()
        self.win1.switch_win2.connect(self.show_win2)
        self.win1.ui.show()

    def show_win2(self):
        self.win2 = win2()
        self.win2.switch_win3.connect(self.show_win3)
        self.win2.ui.show()

    def show_win3(self):
        self.win3 = win3()
        self.win3.ui.show()

通过使用可以得知,页面跳转的跳转操作其实是在controller类里面进行的
比如这一句,就是把win2类里面的switch_win3这个跳转信号与controller里面的show_win3()函数连接

self.win2.switch_win3.connect(self.show_win3)

主函数就这样:

if __name__ == '__main__':
    app = QApplication(sys.argv)

    w = controller()
    w.show_win1()

    app.exec_()

总的代码:

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5 import uic, QtCore
from PyQt5 import QtWidgets

class win1(QWidget):
    switch_win2 = QtCore.pyqtSignal()
    def __init__(self):
        super().__init__()
        self.ui = uic.loadUi("./win1.ui")
        self.ui.pushButton.clicked.connect(self.todobtn1)


    def todobtn1(self):
        self.switch_win2.emit()
        self.ui.close()

class win2(QWidget):

    switch_win3 = QtCore.pyqtSignal()
    def __init__(self):
        super().__init__()
        self.ui = uic.loadUi("./win2.ui")
        self.ui.pushButton.clicked.connect(self.write1)
        self.ui.pushButton_3.clicked.connect(self.tobtn3)

    def write1(self):
        text = self.ui.textEdit.toPlainText()
        fp = open("./test.txt", 'a')
        fp.write(text)
        fp.write("\n")
        self.ui.textEdit.clear()
        fp.close()

    def tobtn3(self):
        self.switch_win3.emit()

class win3(QWidget):
    def __init__(self):
        super().__init__()
        self.ui = uic.loadUi("./win3.ui")
        self.read1()

    def read1(self):
        fp = open("./test.txt", 'r')
        for line in fp:
            self.ui.textBrowser.append(line)
        fp.close()



class controller:

    def __init__(self):
        pass

    def show_win1(self):
        self.win1 = win1()
        self.win1.switch_win2.connect(self.show_win2)
        self.win1.ui.show()

    def show_win2(self):
        self.win2 = win2()
        self.win2.switch_win3.connect(self.show_win3)
        self.win2.ui.show()

    def show_win3(self):
        self.win3 = win3()
        self.win3.ui.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)

    w = controller()
    w.show_win1()

    app.exec_()

效果:

1
2
3
4
5

pyqtSignal 传递参数

12月4日17点添加
由于python和我平时用的c++中有些地方不同,而我还是用c++的思想来找传递参数怎么用,就没找到合适的了。
最后发现emmm
先如下所示,这是我写的一个类,主要就是输入网址然后爬源码

class urlwin1(QWidget):
    switch_win31 = QtCore.pyqtSignal(str)
    def __init__(self):
        super().__init__()
        self.ui = uic.loadUi("./urlwin1.ui")
        self.ui.pushButton.clicked.connect(self.getCtrlU)

    def getCtrlU(self):
        text = self.ui.lineEdit.text()
        response = urllib.request.urlopen(text)
        data = response.read().decode('utf-8')
        self.switch_win31.emit(data)

页面如图
19
我就想跳转到另一个页面专门展示我爬到的
后面上网查的时候才发现,原来参数是隐含着的,不必明显写出来

class controller:
    def show_urlwin1(self):
        self.urlwin1 = urlwin1()
        self.urlwin1.switch_win31.connect(self.show_win31)
        self.urlwin1.ui.show()

    def show_win31(self, data):
        self.win3 = win3()
        self.win3.ui.textBrowser.append(data)
        self.win3.ui.show()

在类里面,data和switch_win31这个信号是绑定好了的
44
所以在c++里要加参数的时候,这里可以不加
111
那么转念一想,我在C++上用QT的时候遇到这种要传参数的槽函数绑定时,我总是束手无策,所以直接将参数转变为对象的一个成员变量了,是否QTc++也并不怎么需要把传递的参数写出来呢?

效果

131

222

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泉绮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值