python+pyQt5學(xué)習(xí)之自定義信號

1哑蔫、先看效果圖


1528429873.png

2钉寝、界面效果是通過pyQt5直接轉(zhuǎn)換的代碼,不建議直接修改代碼闸迷。

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", "發(fā)送"))
        self.pushButton_2.setText(_translate("MainWindow", "清除"))
        self.pushButton_3.setText(_translate("MainWindow", "進度條"))

3嵌纲、界面的功能實現(xiàn)如下:

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


class Test(QtWidgets.QMainWindow, Ui_MainWindow):
    # 自定義發(fā)送信號
    _send_signal = pyqtSignal(str)
    # 自定義清除信號
    _clear_signal = pyqtSignal()
    value = 0

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

        self.timer = QBasicTimer()
        # 將信號和函數(shù)綁定---ps接受信號及處理信號的工作內(nèi)容。
        # 注意函數(shù)不要帶() 否則會報錯錯誤argument 1 has unexpected type 'NoneType'
        self._send_signal.connect(self.send)
        # 將控件和函數(shù)綁定---ps信號發(fā)送給要響應(yīng)點擊事件的函數(shù)腥沽。
        self.pushButton.clicked.connect(self.send_signal_emit)

        # 信號綁定函數(shù)
        self._clear_signal.connect(self.clear)
        # 控件綁定函數(shù)
        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'

    # 以下函數(shù)是和信號綁定的逮走,處理信號內(nèi)容
    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)

# 信號發(fā)射函數(shù)是和控件綁定的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('當(dāng)前內(nèi)容為空!!')

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

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

    # 鍵盤點擊監(jiān)聽
    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_())

總結(jié):
代碼比較簡單,只是作為學(xué)習(xí)如何使用signal自定義按鈕點擊事件的傳遞與觸發(fā)今阳。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末师溅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子盾舌,更是在濱河造成了極大的恐慌墓臭,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妖谴,死亡現(xiàn)場離奇詭異窿锉,居然都是意外死亡,警方通過查閱死者的電腦和手機膝舅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門嗡载,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人仍稀,你說我怎么就攤上這事洼滚。” “怎么了技潘?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵遥巴,是天一觀的道長千康。 經(jīng)常有香客問我,道長挪哄,這世上最難降的妖魔是什么吧秕? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任琉闪,我火速辦了婚禮迹炼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘颠毙。我一直安慰自己斯入,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布蛀蜜。 她就那樣靜靜地躺著刻两,像睡著了一般。 火紅的嫁衣襯著肌膚如雪滴某。 梳的紋絲不亂的頭發(fā)上磅摹,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天,我揣著相機與錄音霎奢,去河邊找鬼户誓。 笑死,一個胖子當(dāng)著我的面吹牛幕侠,可吹牛的內(nèi)容都是我干的帝美。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼晤硕,長吁一口氣:“原來是場噩夢啊……” “哼悼潭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起舞箍,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤舰褪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后疏橄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抵知,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年软族,在試婚紗的時候發(fā)現(xiàn)自己被綠了刷喜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡立砸,死狀恐怖掖疮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情颗祝,我是刑警寧澤浊闪,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布恼布,位于F島的核電站,受9級特大地震影響搁宾,放射性物質(zhì)發(fā)生泄漏折汞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一盖腿、第九天 我趴在偏房一處隱蔽的房頂上張望爽待。 院中可真熱鬧,春花似錦翩腐、人聲如沸鸟款。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽何什。三九已至,卻和暖如春等龙,著一層夾襖步出監(jiān)牢的瞬間处渣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工蛛砰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留罐栈,地道東北人。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓暴备,卻偏偏與公主長得像悠瞬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子涯捻,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1浅妆、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,979評論 3 119
  • 一個不錯的預(yù)見,轉(zhuǎn)發(fā)給大家:摘自朋友圈縱觀中國發(fā)展大勢障癌,2017年將是偉大而又轉(zhuǎn)折的一年凌外,那么2017年將會發(fā)生哪...
    tgg2017閱讀 206評論 0 0
  • 我為什么只能愛你一時轿亮,卻不能愛你一世疮薇? 倉央嘉措 緣何 我只能愛你一時, 卻不能愛你一世我注? 滿懷著無限的春意按咒, ...
    禾未秀閱讀 659評論 0 1