美文网首页
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学习之自定义信号

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