python+pyQt5学习之自定义信号

2018-06-08  本文已影响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自定义按钮点击事件的传递与触发。

上一篇下一篇

猜你喜欢

热点阅读