当前位置:   article > 正文

pyqt5多窗口切换_pyqt5窗口切换

pyqt5窗口切换

最近在研究qt5,研究到多窗口切换,发现网上讲的不是很清楚,在此记录一下

第一页

首先创建页面
first = pyqtSignal()为一个连接槽,用于连接QPushButton的事件
self.first.emit()发出一个信号

class FirstUI(QWidget):
    first = pyqtSignal()

    def __init__(self, *args, **kwargs):
        super(FirstUI, self).__init__(*args, **kwargs)
        self.resize(500, 500)
        self.but = QPushButton('first', self)
        self.but.resize(100, 40)
        self.but.move(100, 100)
        self.but.clicked.connect(self.but_clicked)

    def but_clicked(self):
        self.first.emit()
        self.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

emit()默认为空,如果添加值,例:emit('first ')时pyqtSignal()必须要一个参数接收数据pyqtSignal(str)str为数据类型,可自己替换
需要注意的是emit('first ')pyqtSignal(str)数据类型要统一

可以这么写:

class FirstUI(QWidget):
    first = pyqtSignal(str)

    def __init__(self, *args, **kwargs):
        super(FirstUI, self).__init__(*args, **kwargs)
        self.resize(500, 500)
        self.but = QPushButton('first', self)
        self.but.resize(100, 40)
        self.but.move(100, 100)
        self.but.clicked.connect(self.but_clicked)

    def but_clicked(self):
        self.first.emit('first')
        self.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

第二页

代码与第一页基本相同

第一种写法

class SecondUi(QWidget):
    second = pyqtSignal()

    def __init__(self, *args, **kwargs):
        super(SecondUi, self).__init__(*args, **kwargs)
        self.resize(500, 500)
        self.but = QPushButton('second', self)
        self.but.resize(100, 40)
        self.but.move(100, 100)
        self.but.clicked.connect(self.but_clicked)

    def but_clicked(self):
        self.second.emit()
        self.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

第二种写法

class SecondUi(QWidget):
    second = pyqtSignal(str)

    def __init__(self, *args, **kwargs):
        super(SecondUi, self).__init__(*args, **kwargs)
        self.resize(500, 500)
        self.but = QPushButton('second', self)
        self.but.resize(100, 40)
        self.but.move(100, 100)
        self.but.clicked.connect(self.but_clicked)

    def but_clicked(self):
        self.second.emit('second')
        self.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

调用页面

self.firstui.first.connect(self.second)重写FirstUI()中的QPushButton事件
同理SecondUi()也是

注:重写后,程序会先运行
def but_clicked(self): self.second.emit('second') self.close()函数,运行完毕后会继续续运行自定义的函数

class MainWindow:
    def first(self):
        self.firstui = FirstUI()
        self.firstui.first.connect(self.second)
        self.firstui.show()

    def second(self):
        self.secondui = SecondUi()
        self.secondui.second.connect(self.first)
        self.secondui.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

如果需要接收self.second.emit('second')中的’second’值,在调用槽函数时,在self.firstui.first.connect(self.second)中 可用self.second接收

请添加图片描述

完整代码

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sys


class FirstUI(QWidget):
    first = pyqtSignal(str)

    def __init__(self, *args, **kwargs):
        super(FirstUI, self).__init__(*args, **kwargs)
        self.resize(500, 500)
        self.but = QPushButton('first', self)
        self.but.resize(100, 40)
        self.but.move(100, 100)
        self.but.clicked.connect(self.but_clicked)

    def but_clicked(self):
        self.first.emit('first')
        self.close()


class SecondUi(QWidget):
    second = pyqtSignal(str)

    def __init__(self, *args, **kwargs):
        super(SecondUi, self).__init__(*args, **kwargs)
        self.resize(500, 500)
        self.but = QPushButton('second', self)
        self.but.resize(100, 40)
        self.but.move(100, 100)
        self.but.clicked.connect(self.but_clicked)

    def but_clicked(self):
        self.second.emit('second')
        self.close()


class MainWindow:
    def first(self):
        self.firstui = FirstUI()
        self.firstui.first.connect(self.second)
        self.firstui.show()

    def second(self, st):
        print(st)
        self.secondui = SecondUi()
        self.secondui.second.connect(self.first)
        self.secondui.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ma = MainWindow()
    ma.first()
    sys.exit(app.exec_())  # app.exet_()是指程序一直循环运行直到主窗口被关闭终止进程(如果没有这句话,程序运行时会一闪而过)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

若不需要第三个调用函数MainWindow(),也可以这么写

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sys


class FirstUI(QWidget):
    def __init__(self, *args, **kwargs):
        super(FirstUI, self).__init__(*args, **kwargs)
        self.resize(500, 500)
        self.but = QPushButton('first', self)
        self.but.resize(100, 40)
        self.but.move(100, 100)
        self.but.clicked.connect(self.but_clicked)

    def but_clicked(self):
        self.close()
        # SecondUi必须为类的一个属性,否则程序会一闪而过,必须带self.
        self.s = SecondUi()
        self.s.show()


class SecondUi(QWidget):
    def __init__(self, *args, **kwargs):
        super(SecondUi, self).__init__(*args, **kwargs)
        self.resize(500, 500)
        self.but = QPushButton('second', self)
        self.but.resize(100, 40)
        self.but.move(100, 100)
        self.but.clicked.connect(self.but_clicked)

    def but_clicked(self):
        self.close()
        # FirstUI必须为类的一个属性,否则程序会一闪而过,必须带self.
        self.f = FirstUI()
        self.f.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    f = FirstUI()
    f.show()
    sys.exit(app.exec_())

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/119573
推荐阅读
相关标签
  

闽ICP备14008679号