美文网首页
python+pyQt5学习之自定义信号

python+pyQt5学习之自定义信号

作者: 逆夏时光 | 来源:发表于2018-06-08 11:56 被阅读0次

1、先看效果图


1528429873.png

2、界面效果是通过pyQt5直接转换的代码,不建议直接修改代码。

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.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(20, 360, 471, 51))
        self.lineEdit.setObjectName("lineEdit")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(20, 440, 93, 28))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(140, 440, 93, 28))
        self.pushButton_2.setObjectName("pushButton_2")
        self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
        self.textEdit.setGeometry(QtCore.QRect(20, 30, 471, 301))
        self.textEdit.setObjectName("textEdit")
        self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
        self.progressBar.setGeometry(QtCore.QRect(20, 0, 511, 23))
        self.progressBar.setProperty("value", 24)
        self.progressBar.setObjectName("progressBar")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(250, 440, 93, 28))
        self.pushButton_3.setObjectName("pushButton_3")
        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)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "发送"))
        self.pushButton_2.setText(_translate("MainWindow", "清除"))
        self.pushButton_3.setText(_translate("MainWindow", "进度条"))

3、界面的功能实现如下:

from PyQt5 import QtWidgets
from window import Ui_MainWindow
from PyQt5.QtCore import *
import sys
import time


class Test(QtWidgets.QMainWindow, Ui_MainWindow):
    # 自定义发送信号
    _send_signal = pyqtSignal(str)
    # 自定义清除信号
    _clear_signal = pyqtSignal()
    value = 0

    def __init__(self):
        super(Test, self).__init__()
        self.setupUi(self)

        self.timer = QBasicTimer()
        # 将信号和函数绑定---ps接受信号及处理信号的工作内容。
        # 注意函数不要带() 否则会报错错误argument 1 has unexpected type 'NoneType'
        self._send_signal.connect(self.send)
        # 将控件和函数绑定---ps信号发送给要响应点击事件的函数。
        self.pushButton.clicked.connect(self.send_signal_emit)

        # 信号绑定函数
        self._clear_signal.connect(self.clear)
        # 控件绑定函数
        self.pushButton_2.clicked.connect(self.clear_signal_emit)
        self.pushButton_3.clicked.connect(self.update_progressbar)
        # 不能connect(self.update_progressbar_emit()) 错误argument 1 has unexpected type 'NoneType'

    # 以下函数是和信号绑定的,处理信号内容
    def send(self, msg):
        # self.textEdit.setText(msg)
        self.textEdit.append(msg)

    def clear(self):
        self.textEdit.clear()
        self.lineEdit.clear()

    def update_progressbar(self, val):
        if val > 100 and self.timer.isActive():
            self.pushButton_3.setText('开始')
            return
        else:
            self.pushButton_3.setText('停止')
            self.timer.start(100, self)

    # 继承子QObject
    def timerEvent(self, event):
        if self.value > 100 and self.timer.isActive():
            self.timer.stop()
            self.value = 0
            self.pushButton_3.setText('完成')
            return
        else:
            self.value += 1
            self.progressBar.setValue(self.value)

# 信号发射函数是和控件绑定的widget.click.connect()
    def send_signal_emit(self):
        _str = self.lineEdit.text()
        if _str is not None and len(_str) != 0:
            self._send_signal.emit(_str)
        else:
            self._send_signal.emit('当前内容为空!!')

    def clear_signal_emit(self):
        self._clear_signal.emit()

    def update_progressbar_emit(self):
        self._progress_signal.emit(self.value)

    # 键盘点击监听
    def keyPressEvent(self, event):
        if event.key() == Qt.Key_F1:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_F2:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_F3:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_F4:
            print('你按下了'+str(event.key()))
        if event.key() == Qt.Key_F5:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_F6:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_F7:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_F8:
            print('你按下了'+str(event.key()))
        if event.key() == Qt.Key_F9:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_F10:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_F11:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_F12:
            print('你按下了'+str(event.key()))

        if event.key() == Qt.Key_A:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_B:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_C:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_D:
            print('你按下了'+str(event.key()))
        if event.key() == Qt.Key_E:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_F:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_G:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_H:
            print('你按下了'+str(event.key()))
        if event.key() == Qt.Key_J:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_K:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_L:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_M:
            print('你按下了'+str(event.key()))

        if event.key() == Qt.Key_N:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_O:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_P:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_Q:
            print('你按下了'+str(event.key()))
        if event.key() == Qt.Key_R:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_S:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_T:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_U:
            print('你按下了'+str(event.key()))
        if event.key() == Qt.Key_V:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_W:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_X:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_Y:
            print('你按下了'+str(event.key()))

        if event.key() == Qt.Key_Z:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_Tab:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_Up:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_DOWN:
            print('你按下了'+str(event.key()))
        if event.key() == Qt.Key_Left:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_Right:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_Plus:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_Alt:
            print('你按下了'+str(event.key()))
        if event.key() == Qt.Key_Delete:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_CapsLock:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_END:
            print('你按下了' + str(event.key()))
        if event.key() == Qt.Key_PageDown:
            print('你按下了'+str(event.key()))


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    test = Test()
    test.show()
    sys.exit(app.exec_())

总结:
代码比较简单,只是作为学习如何使用signal自定义按钮点击事件的传递与触发。

相关文章

  • python+pyQt5学习之自定义信号

    1、先看效果图 2、界面效果是通过pyQt5直接转换的代码,不建议直接修改代码。 3、界面的功能实现如下: 总结:...

  • Django 框架之 Django信号

    知识点 概念 如何监听信号 Django内置信号 自定义信号 使用Django内置信号 概念 Django 提供一...

  • 信号与槽(SIGNAL-SLOT)

    一、系统设置槽-信号 在QtCreator中建立槽信号事件 设置槽事件 设置信号事件 二、自定义槽信号事件 设置对...

  • linux信号

    信号的分类 1.可靠信号: 此类信号支持排队, 不会丢失, 发送多少次就接收多少次. 此类信号的用途可由用户自定义...

  • PHP中一些函数方法

    php自定义函数之递归函数 php自定义函数之静态变量 php​ 使用系统内置函数 亚麻跌”是PHP学习时间处理的...

  • 8.jQuery学习笔记第八节/Jq的效果之自定义动画

    jQuery学习笔记第八节/Jq的效果之自定义动画 1,自定义动画 前面我们学习的 show().hide().f...

  • Qt自定义信号槽

    自定义信号槽 关于Q_OBJECT宏 只有继承了QObject类的类,才具有信号槽的能力。所以,为了使用信号槽,必...

  • Qt5 - 3. 自定义信号&槽

    信号&槽是 Qt 的核心特性之一,Qt 允许我们自定义信号&槽,因此我们可以在 Qt 程序中定义我们自己的信号&槽...

  • Nginx 使用 logrotate 进行日志滚动

    Nginx 日志滚动(官方) 向 Nginx 主进程发送 USR1 信号。 USR1 信号量被 Nginx 自定义...

  • 自定义扩展

    自定义扩展时,利用信号在指定位置注册制定操作

网友评论

      本文标题:python+pyQt5学习之自定义信号

      本文链接:https://www.haomeiwen.com/subject/zwoosftx.html