這是自己在
學習
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...