1. 程式人生 > >pyqt4 訊號與槽方式

pyqt4 訊號與槽方式

本例項實現一個"Hello Kitty!"例子,簡單介紹Qt程式設計的基本流程,以及Qt程式的編繹執行方式,例項效果圖如圖所示。

 

這是一個簡單的例子,整個對話方塊只有一個按鈕,單擊該按鈕,對話方塊關閉,退出程式。

實現程式碼如下:

  1. from PyQt4.QtGui import *  
  2. from PyQt4.QtCore import *  
  3. import sys  
  4. app=QApplication(sys.argv)  
  5. b=QPushButton("Hello Kitty!")  
  6. b.show()  
  7. app.connect(b,SIGNAL("clicked()"
    ),app,SLOT("quit()"))  
  8. app.exec_()  

第1行匯入PyQt4.QtGui的所有類及模組,包括QApplication,所有Qt圖形化應用程式都必須包含此檔案,它包含了Qt圖形化應用程式的各種資源,基本設定,控制流以及事件處理等。

第5行新建立了一個QApplication物件,每個Qt應用程式都必須有且只有一個QApplication物件,採用sys.argv作為引數,便於程式處理命令列引數。

第6行建立了一個QPushButton物件,並設定它的顯示文字為“Hello Kitty!”,由於此處並沒有指定按鈕的父窗體,因此以自己作為主視窗。

第7行呼叫show()方法,顯示此按鈕。控制元件被建立時,預設是不顯示的,必須呼叫show()函式來顯示它。

第8行的connect方法是Qt最重要的特徵,即訊號與槽的機制。當按鈕被按下則觸發clicked訊號,與之相連的QApplication物件的槽quit()響應按鈕單擊訊號,執行退出應用程式的操作。關於訊號與槽機制在本例項最後將進行詳細的分析。

最後呼叫QApplication的exec_()方法,程式進入訊息迴圈,等待可能輸入進行響應。Qt完成事件處理及顯示的工作,並在應用程式退出時返回exec_()的值。

最後執行程式即可出現上圖所示的對話方塊,一個簡單的Hello Kitty!例子完成。

訊號與槽機制作為Qt最重要的特性,提供了任意兩個Qt物件之間的通訊機制。其中,訊號會在某個特定情況或動作下被觸發,槽是用於接收並處理訊號的函式。例如,要將一個視窗中的變化情況通知給另一個視窗,則一個視窗傳送訊號,另一個視窗的槽接收此訊號並進行相應的操作,即可實現兩個視窗之間的通訊。這比傳統的圖形化程式採用回撥函式的方式實現物件間通訊要簡單靈活得多。每個Qt物件都包含預定的訊號和槽,當一某一特定事件發生時,一個訊號被髮射,與訊號相關聯的槽則會響應訊號完成相應的處理。

訊號與槽機制常用的連線方式為:

connect(Object1,SIGNAL(signal),Object2,SLOT(slot))

signal為物件Object1的訊號,slot為物件Object2的槽,Qt的視窗部件都包含若干個預定義的訊號和若干個預定義的槽。當一個類被繼承時,該類的訊號和槽也同時被繼承。開始人員也可以根據需要定義自己的訊號和槽。

訊號與槽機制可以有多種連線方式,下圖描述了訊號與槽的多種可能連線方式。

1.一個訊號可以與另一個訊號相連

connect(Object1,SIGNAL(signal1),Object2,SIGNAL(signal1))

即表示Object1的訊號1發射可以觸發Object2的訊號1發射。

2.表示一個訊號可以與多個槽相連

connect(Object1,SIGNAL(signal2),Object2,SLOT(slot2))

connect(Object1,SIGNAL(signal2),Object3,SLOT(slot1))

3.表示同一個槽可以響應多個訊號

connect(Object1,SIGNAL(signal2),Object2,SLOT(slot2))

connect(Object3,SIGNAL(signal2),Object2,SLOT(slot2))