signal與slot是Qt的核心機制,即當事件循環創建後,通過信號與槽的連接,便可實現的對象之間的通信。通俗的說,信號發射後,其連接的槽函數將會自動執行。在pyqt5中,信號與槽通過QObject.signal.connect()連接。
簡單使用 關閉窗口按鍵的設計
首先將控件拖入窗口並對objectName屬性重命名
選擇Edit菜單中的編輯信號/槽,進入信號槽編輯模式
直接在發射者(關閉窗口按鈕)上按住鼠標左鍵不放,拖動到接收者(Form窗體)上,以建立連接
接着彈出配置連接菜單,勾選顯示從QWidget繼承的信號和槽複選框(爲了實現單擊按鈕,關閉窗口的效果),左側pushbutton 選擇clicked()信號,右側Form槽函數,選擇close()
選擇OK
保存轉py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'Signal.ui'
#
# Created by: PyQt5 UI code generator 5.14.1
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(400, 300)
self.closeWinBtn = QtWidgets.QPushButton(Form)
self.closeWinBtn.setGeometry(QtCore.QRect(150, 130, 93, 28))
self.closeWinBtn.setObjectName("closeWinBtn")
self.retranslateUi(Form)
self.closeWinBtn.clicked.connect(Form.close)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.closeWinBtn.setText(_translate("Form", "關閉窗口"))
創建一個調用窗口顯示的文件
import sys
from PyQt5.QtWidgets import QApplication , QMainWindow
from Signal import Ui_Form
class MyMainWindow(QMainWindow,Ui_Form):
def __init__(self, parent=None):
super(MyMainWindow,self).__init__(parent)
self.setupUi(self)
if __name__=="__main__":
app = QApplication(sys.argv)
myWin = MyMainWindow()
myWin.show()
sys.exit(app.exec_())
大功告成
需要注意的是上述方法當信號與槽連接錯誤時,較難修改,我們可以直接使用右下角的signal/slot editor 來進行編輯
轉化後的代碼是
self.retranslateUi(MainWindow)
self.checkBox.clicked['bool'].connect(self.label.setVisible)
self.checkBox.clicked['bool'].connect(self.lineEdit.setEnabled)
self.checkBox.clicked['bool'].connect(self.textEdit.setVisible)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
效果
此外在編寫邏輯文件時注意將checkBox初始化
def __init__(self, parent=None):
super(MyMainWindow, self).__init__(parent)
self.setupUi(self)
self.checkBox.setChecked(True) # 設置checkBox默認的初始狀態爲選擇