詳解Pyqt4事件和訊號

2021-07-16 12:48:39 字數 3421 閱讀 7384

這是自己在

學習

pyqt

的過程中總結出來的筆記。

呼叫應用的 exec_() 方法之後,應用進入主迴圈。主迴圈獲取事件並把它們發往物件。應用在它的生命週期中產生的不同事件互動。事件主要由使用者產生,但是它們也可以由其他方式產生,如:網際網路,視窗管理器,定時器,當乙個特殊的事件發生時,將發射訊號,「槽 」可以是任何python呼叫,當鏈結到槽的訊號發射,該槽將被呼叫。

在事件模型中,有三個參與者:

event source:事件源,事件**物件**了事件的目標要處理的任務

event object:事件物件,指狀態改變的物件,它產生了事件。 事件物件 (event)封裝了事件源的狀態改變。

event target:事件目標,事件物件想要想要通知的物件,貌似這個不是必須的。

#!/usr/bin/python

# -*- coding: utf-8 -*-

import sysfrom pyqt4 import qtgui, qtcore

class lcdslider(qtgui.qwidget):

def __init__(self):

super(lcdslider, self).__init__()

self.initui()

def initui(self):

lcd = qtgui.qlcdnumber(self)

# 初始化數字lcd面板

slider = qtgui.qslider(qtcore.qt.horizontal, self)

# 初始化水平滑塊

vbox = qtgui.qvboxlayout()

vbox.addwidget(lcd)

vbox.addwidget(slider)

self.setlayout(vbox)

self.connect(slider,  qtcore.signal('valuechanged(int)'), lcd,

qtcore.slot('display(int)'))

# 滑塊為事件源,當滑塊收到valuechange(int)的訊號之後,lcd的被指定的「槽」display(int)會被呼叫

self.setwindowtitle('signal & slot')

self.resize(250, 150)

ex = lcdslider()

ex.show()

connect方法有4個引數,sender是傳送訊號的物件,signal是發射的訊號,receiver是接收訊號的物件,slog是對訊號反應的方法。

#!/usr/bin/python

# -*- coding: utf-8 -*-

import sysfrom pyqt4 import qtgui, qtcore

class escapeexample(qtgui.qwidget):

def __init__(self):

super(escapeexample, self).__init__()

self.setwindowtitle('escape')

self.resize(250, 150)

# 重新實現指定按鈕被按下的事件處理程式

def keypressevent(self, event):

if event.key() == qtcore.qt.key_escape:

self.close()

ex = escapeexample()

ex.show()

重新實現了 keypressevent() 處理。按下esc會自動退出。

#!/usr/bin/python

# -*- coding: utf-8 -*-

import sysfrom pyqt4 import qtgui, qtcore

class senderexample(qtgui.qmainwindow):

def __init__(self):

super(senderexample, self).__init__()

self.initui()

def initui(self):

button1 = qtgui.qpushbutton("button 1", self)

button1.move(30, 50)

button2 = qtgui.qpushbutton("button 2", self)

button2.move(150, 50)

# 接收到clicked訊號時呼叫buttonclicked

self.connect(button1, qtcore.signal('clicked()'),

self.buttonclicked)

self.connect(button2, qtcore.signal('clicked()'),

self.buttonclicked)

self.statusbar().showmessage('ready')

self.setwindowtitle('event sender')

self.resize(290, 150)

def buttonclicked(self):

sender = self.sender()

# sender可用來獲取訊號源

self.statusbar().showmessage(sender.text() + ' was pressed')

ex = senderexample()

ex.show()

兩個按鈕都連線了同乙個訊號,按鈕被按下的時候狀態列會顯示按鈕的標籤。

自定義訊號:

#!/usr/bin/python

# -*- coding: utf-8 -*-

import sysfrom pyqt4 import qtgui, qtcore

class emitexample(qtgui.qwidget):

def __init__(self):

super(emitexample, self).__init__()

self.initui()

def initui(self):

# 自己建立乙個訊號,接收後關閉程式

qtcore.slot('close()'))

self.setwindowtitle('emit')

self.resize(250, 150)

def mousepressevent(self, event):

# 通過 emit() 方法發射訊號

ex = emitexample()

ex.show()

單擊滑鼠程式會關閉。

影瀾

PyQt4 學習筆記4之事件與訊號

所有的gui應用程式都是基於事件驅動的。事件主要由應用程式的使用者產生,但也可以由其他方式生成 比如,網路連線,視窗管理器或者定時器。當呼叫應用程式的exec 方法時,應用程式就進入主迴圈,主迴圈獲取事件並將其傳送給相應的物件。在事件模型中,有三個參與者 事件源來自於狀態發生改變的物件,它們產生事件...

pyqt4學習筆記

訊號與槽機制作為qt最重要的特性,提供了任意兩個qt物件之間的通訊機制。其中,訊號會在某個特定情況或動作下被觸發,槽是用於接收並處理訊號的函式。例如,要將乙個視窗中的變化情況通知給另乙個視窗,則乙個視窗傳送訊號,另乙個視窗的槽接收此訊號並進行相應的操作,即可實現兩個視窗之間的通訊。這比傳統的圖形化程...

PyQt4學習資料彙總

乙個月前研究了下pyqt4,感覺比較不錯。相比wxpython,介面美觀了很多,並且將介面設計與 邏輯很好的分離了開來。關於pyqt4的資料也不少,這裡我將我找到的資料彙總一下,以防自己以後忘得一乾二淨。1.pyqt4資料鏈結 2.寫 時,最好的幫助文件 static docs pyqt4 html...