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自定义按钮点击事件的传递与触发。