信号与槽、多窗口设计

信号与槽

1.基本概念

信号与槽是Qt的核心机制,在PyQt5中,信号与槽是通过对象的signal.connect()方法进行连接的。

PyQt5中使用信号与槽的主要特点如下:

1.一个信号可以连接多个槽

2.一个槽可以监听多个信号

3.信号与信号之间可以互连

4.信号与槽的连接可以跨线程

5.信号与槽的连接方式既可以是同步,也可以是异步

6.信号的参数可以是任何的Python类型

以下是信号与槽的连接工作示意过程

在这里插入图片描述

2.编辑信号与槽

1.打开Qtdesigner,添加PushButton按钮,设置text属性值为“关闭”

在这里插入图片描述

2.选中添加的“关闭”按钮,在菜单栏中选择“编辑信号/槽”在这里插入图片描述菜单项,然后按住鼠标左键拖动至窗口的空白区域,自动弹出“配置连接”对话框,首先选择“显示从QWidget继承的信号与槽”复选框,然后在上方的信号与槽列表中分别选中“clicked()”和“close()”

在这里插入图片描述
3.单击OK,即可完成信号与槽的关联

在这里插入图片描述
关闭窗口的关键代码如下

self.pushButton.clicked.connect(MainWindow.close)

3.自定义槽

自定义一个槽函数,用单击按钮时,弹出一个“hello world”信息提示框

    def Showmessage(self):
            from PyQt5.QtWidgets import QMessageBox
            QMessageBox.information(MainWindow,'提示','hello world',QMessageBox.Yes|QMessageBox.No,QMessageBox.No)

将自定义槽连接到信号

self.pushButton.clicked.connect(self.Showmessage) #点击事件

在这里插入图片描述

多窗口设计

窗口1:

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Window1(object):
    def setupUi(self, Window1):
        Window1.setObjectName("Window1")
        Window1.setEnabled(True)
        Window1.resize(426, 265)
        self.centralwidget = QtWidgets.QWidget(Window1)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(100, 80, 93, 28))
        self.pushButton.setObjectName("pushButton")
        Window1.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(Window1)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 426, 26))
        self.menubar.setObjectName("menubar")
        Window1.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(Window1)
        self.statusbar.setObjectName("statusbar")
        Window1.setStatusBar(self.statusbar)

        self.retranslateUi(Window1)
        QtCore.QMetaObject.connectSlotsByName(Window1)

        self.pushButton.clicked.connect(self.open)

    def open(self):
        import untitled2, untitled3, untitled4
        self.second = untitled2.Ui_Window2()
        self.second.show()  # 显示窗体

        self.third = untitled3.Ui_Window4()
        self.third.show()  # 显示窗体

        self.fouth = untitled4.Ui_Window3()
        self.fouth.show()  # 显示窗体

    def retranslateUi(self, Window1):
        _translate = QtCore.QCoreApplication.translate
        Window1.setWindowTitle(_translate("Window1", "MainWindow"))
        self.pushButton.setText(_translate("Window1", "打开"))

def __init__(self):   #构造方法
    super(Ui_Window1,self).__init__()
    self.setupUi(self)  #初始化窗口设置


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    Window1 = QtWidgets.QMainWindow()
    ui = Ui_Window1()
    ui.setupUi(Window1)
    Window1.show()
    sys.exit(app.exec_())

窗口2

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow

class Ui_Window2(QMainWindow):
    def setupUi(self, Window2):
        Window2.setObjectName("Window2")
        Window2.resize(240, 320)
        self.centralwidget = QtWidgets.QWidget(Window2)
        self.centralwidget.setObjectName("centralwidget")
        Window2.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(Window2)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 240, 26))
        self.menubar.setObjectName("menubar")
        Window2.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(Window2)
        self.statusbar.setObjectName("statusbar")
        Window2.setStatusBar(self.statusbar)

        self.retranslateUi(Window2)
        QtCore.QMetaObject.connectSlotsByName(Window2)

    def retranslateUi(self, Window2):
        _translate = QtCore.QCoreApplication.translate
        Window2.setWindowTitle(_translate("Window2", "MainWindow"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Window2 = QtWidgets.QMainWindow()
    ui = Ui_Window2()
    ui.setupUi(Window2)
    Window2.show()
    sys.exit(app.exec_())

窗口3

from PyQt5.QtWidgets import QMainWindow

class Ui_Window4(QMainWindow):
    def setupUi(self, Window4):
        Window4.setObjectName("Window4")
        Window4.resize(224, 320)
        self.centralwidget = QtWidgets.QWidget(Window4)
        self.centralwidget.setObjectName("centralwidget")
        Window4.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(Window4)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 224, 26))
        self.menubar.setObjectName("menubar")
        Window4.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(Window4)
        self.statusbar.setObjectName("statusbar")
        Window4.setStatusBar(self.statusbar)

        self.retranslateUi(Window4)
        QtCore.QMetaObject.connectSlotsByName(Window4)

    def retranslateUi(self, Window4):
        _translate = QtCore.QCoreApplication.translate
        Window4.setWindowTitle(_translate("Window4", "MainWindow"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Window4 = QtWidgets.QMainWindow()
    ui = Ui_Window4()
    ui.setupUi(Window4)
    Window4.show()
    sys.exit(app.exec_())

窗口4

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow

class Ui_Window3(QMainWindow):
    def setupUi(self, Window3):
        Window3.setObjectName("Window3")
        Window3.resize(320, 240)
        self.centralwidget = QtWidgets.QWidget(Window3)
        self.centralwidget.setObjectName("centralwidget")
        Window3.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(Window3)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 320, 26))
        self.menubar.setObjectName("menubar")
        Window3.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(Window3)
        self.statusbar.setObjectName("statusbar")
        Window3.setStatusBar(self.statusbar)

        self.retranslateUi(Window3)
        QtCore.QMetaObject.connectSlotsByName(Window3)

    def retranslateUi(self, Window3):
        _translate = QtCore.QCoreApplication.translate
        Window3.setWindowTitle(_translate("Window3", "MainWindow"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Window3 = QtWidgets.QMainWindow()
    ui = Ui_Window3()
    ui.setupUi(Window3)
    Window3.show()
    sys.exit(app.exec_())

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值