自学内容网 自学内容网

【PyQt5教程 二】Qt Designer 信号与槽的使用方法及PyQt5基本小部件说明

目录

一、信号与槽机制:

二、信号与槽使用方法:

(1)使用Qt Designer 的信号与槽编辑器:

(2)使用固定语法直接建立信号槽连接:

 三、PyQt小部件及其触发信号:

(1)常见PyQt小部件及其触发信号:

(2) PyQt5 官方文档:

四、PyQt5 基本小部件:


一、信号与槽机制:

        PyQt5中的信号和槽机制是一种事件驱动编程范式,允许小部件(如按钮和菜单项)在特定用户交互发生时发出信号,并将这些信号连接到槽函数,即定义好的响应动作,从而实现用户界面与程序逻辑的松耦合和交互响应。

        PyQt中的小部件作为事件源,通过继承QObject类获得发出信号的能力。信号是事件通知,而槽是响应这些事件的函数。响应事件函数可以为任意可调用的python函数。

信号与槽机制具有以下特点。

  • 一个信号可以连接到多个槽。

  • 一个信号也可以连接到另一个信号。

  • Signal 参数可以是任何 Python 类型。

  • 一个槽可以连接到许多信号。

  • 连接可以是直接的(即同步的)或排队的(即异步的)。

  • 可以跨线程建立连接。

  • 信号可能会断开连接。

二、信号与槽使用方法:

(1)使用Qt Designer 的信号与槽编辑器:

首先先创建Qt Designer 文件,并在窗口内添加小部件如下:

【PyQt5教程 一】Qt Designer 安装及其使用方法说明,附程序源码

 然后,点击信号与槽编辑器的+号,添加信号与槽:

添加过程

添加完成后保存.ui文件,并使用:

pyuic5 -x Signalandslot.ui -o Signalandslot.py

转化为对应的.py文件。Signalandslot.py如下:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'Signalandslot.ui'
#
# Created by: PyQt5 UI code generator 5.15.11
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.Button1 = QtWidgets.QPushButton(self.centralwidget)
        self.Button1.setGeometry(QtCore.QRect(140, 450, 93, 28))
        self.Button1.setObjectName("Button1")
        self.Button2 = QtWidgets.QPushButton(self.centralwidget)
        self.Button2.setGeometry(QtCore.QRect(540, 450, 93, 28))
        self.Button2.setObjectName("Button2")
        self.line_text = QtWidgets.QLineEdit(self.centralwidget)
        self.line_text.setGeometry(QtCore.QRect(290, 190, 171, 41))
        self.line_text.setObjectName("line_text")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        self.Button1.clicked.connect(self.line_text.clear) # type: ignore
        self.Button2.clicked.connect(MainWindow.close) # type: ignore
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.Button1.setText(_translate("MainWindow", "清空"))
        self.Button2.setText(_translate("MainWindow", "退出"))


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

运行结果:

运行结果

(2)使用固定语法直接建立信号槽连接:

widget.signal.connect(slot_function)

widget为对应触发信号的小部件,signal为信号类型,connect(slot_function)为连接到的槽函数,其中slot_function可以为任意可调用的python函数。

例如之前.ui生成的.py中有:

self.Button1.clicked.connect(self.line_text.clear) # type: ignore
self.Button2.clicked.connect(MainWindow.close) # type: ignore

 Button1,Button2为触发信号的小部件,clicked为触发的信号(即单击按钮),触发后执行槽函数,self.line_text.clear(清空line_text中的文本),MainWindow.close(关闭主窗口)。

 三、PyQt小部件及其触发信号:

PyQt中的信号和槽机制允许小部件(Widgets)在特定事件发生时发出信号,并将这些信号连接到槽函数上,以便执行相应的操作。

(1)常见PyQt小部件及其触发信号:

QPushButton(按钮):

  • clicked 信号:当按钮被点击时触发。可以传递一个布尔值,表示按钮是否被按下。
    btn.clicked.connect(lambda: some_function(True))
  • pressed 信号:当鼠标按下按钮时触发。
    btn.pressed.connect(some_function)
  • released 信号:当鼠标释放按钮时触发。
    btn.released.connect(some_function)

QCheckBox(复选框):

  • stateChanged 信号:当复选框的选中状态改变时触发。传递一个整数参数,表示新的复选框状态(0表示未选中,2表示选中)。
    checkbox.stateChanged.connect(some_function)

QRadioButton(单选按钮):

  • toggled 信号:当单选按钮的选中状态改变时触发。传递一个布尔值参数,表示当前是否被选中。
    radiobutton.toggled.connect(some_function)

QSlider(滑动条):

  • valueChanged 信号:当滑动条的值改变时触发。传递一个整数参数,表示滑动条的新值。
    slider.valueChanged.connect(some_function)
  • rangeChanged 信号:当滑动条的范围改变时触发。
    slider.rangeChanged.connect(some_function)

QListWidget(列表控件):

  • itemClicked 信号:当列表中的项被点击时触发。传递一个列表项对象作为参数。
    listwidget.itemClicked.connect(some_function)
  • itemDoubleClicked 信号:当列表中的项被双击时触发。
    listwidget.itemDoubleClicked.connect(some_function)

QComboBox(下拉列表框):

  • currentIndexChanged 信号:当下拉列表框的当前选中项改变时触发。传递一个整数参数,表示新的当前选中项的索引。
    combobox.currentIndexChanged.connect(some_function)
  • currentTextChanged 信号:当当前选中项的文本改变时触发。
    combobox.currentTextChanged.connect(some_function)

QLineEdit(文本输入框):

  • textChanged 信号:当文本框的内容改变时触发。传递一个字符串参数,表示文本框的新内容。
    lineedit.textChanged.connect(some_function)
  • editingFinished 信号:当编辑完成时触发,通常在用户按下回车键或离开编辑框时。
    lineedit.editingFinished.connect(some_function)

QTableWidget / QTreeView(表格和树视图):

  • itemClicked 信号:当表格或树中的项被点击时触发。
    table.itemClicked.connect(some_function)
  • itemDoubleClicked 信号:当表格或树中的项被双击时触发。
    table.itemDoubleClicked.connect(some_function)

QMainWindow / QDialog(主窗口 / 对话框):

  • accepted 信号:当对话框被接受时触发(例如,用户点击了OK按钮)。
    dialog.accepted.connect(some_function)
  • rejected 信号:当对话框被拒绝时触发(例如,用户点击了Cancel按钮)。
    dialog.rejected.connect(some_function)

(2) PyQt5 官方文档:

PyQt5 官方文档

四、PyQt5 基本小部件:

  • QLabel:用于显示文本或图像,不可编辑,可作为其他控件的辅助标签。

  • QLineEdit:单行文本输入框,适用于用户输入有限长度的文本。

  • QPushButton:按钮控件,点击时可触发预设的函数或动作。

  • QRadioButton:单选按钮,允许在多个选项中选择一个,适用于互斥选择。

  • QCheckBox:复选框,允许用户选择或取消选择一个选项,适用于多选场景。

  • QComboBox:下拉列表框,显示当前选中项,用户可从中选择一个选项。

  • QSpinBox:数字输入框,带有两个按钮用于增加或减少数值。

  • QSlider:滑动条控件,用户通过移动滑块选择一个有界值。

  • QMenuBar, QMenu & QAction:菜单栏、菜单和动作,用于组织和访问应用程序的功能。

  • QToolBar:工具栏,包含按钮和其他控件,提供快速访问常用功能。

  • QInputDialog:预配置对话框,用于收集用户输入的文本。

  • QFontDialog:字体选择对话框,返回用户选择的字体。

  • QFileDialog:文件选择对话框,用于浏览和选择文件。

  • QTabWidget:选项卡控件,允许将多个表单组织在不同的选项卡中。

  • QStackedWidget:堆叠控件,用于在有限空间内切换不同的表单或控件。

  • QSplitter:分割器控件,允许动态调整子控件的大小。

  • QDockWidget:可停靠窗口,可以浮动或附着在主窗口的边缘。

  • QStatusBar:状态栏,用于显示状态信息。

  • QListWidget:列表控件,用于显示和管理项目列表。

  • QScrollBar:滚动条,用于浏览超出可视区域的内容。

  • QCalendarWidget:日历控件,用于选择日期。


原文地址:https://blog.csdn.net/The_xz/article/details/144311825

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!