Qt designer-信號和槽(初識)

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默認的初始狀態爲選擇
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章