- PyGTK 教程
- PyGTK - 首頁
- PyGTK - 簡介
- PyGTK - 環境
- PyGTK - Hello World
- PyGTK - 重要類
- PyGTK - 視窗類
- PyGTK - 按鈕類
- PyGTK - 標籤類
- PyGTK - 輸入框類
- PyGTK - 訊號處理
- PyGTK - 事件處理
- PyGTK - 容器
- PyGTK - 箱式容器類
- PyGTK - 按鈕盒類
- PyGTK - 對齊類
- PyGTK - 事件盒類
- PyGTK - 佈局類
- PyGTK - 組合框類
- PyGTK - 切換按鈕類
- PyGTK - 複選框類
- PyGTK - 單選按鈕類
- PyGTK - 選單欄、選單和選單項
- PyGTK - 工具欄類
- PyGTK - 調整類
- PyGTK - 範圍類
- PyGTK - 刻度類
- PyGTK - 捲軸類
- PyGTK - 對話方塊類
- PyGTK - 訊息對話方塊類
- PyGTK - 關於對話方塊類
- PyGTK - 字型選擇對話方塊
- PyGTK - 顏色選擇對話方塊
- PyGTK - 檔案選擇對話方塊
- PyGTK - 筆記本類
- PyGTK - 框架類
- PyGTK - 帶縱橫比的框架類
- PyGTK - 樹形檢視類
- PyGTK - 分割窗格類
- PyGTK - 狀態列類
- PyGTK - 進度條類
- PyGTK - 視口類
- PyGTK - 滾動視窗類
- PyGTK - 箭頭類
- PyGTK - 圖片類
- PyGTK - 繪圖區類
- PyGTK - 旋轉按鈕類
- PyGTK - 日曆類
- PyGTK - 剪貼簿類
- PyGTK - 標尺類
- PyGTK - 超時
- PyGTK - 拖放
- PyGTK 有用資源
- PyGTK - 快速指南
- PyGTK - 有用資源
- PyGTK - 討論
PyGTK - 超時
PyGTK API 的 gobject 模組有一個有用的函式來建立一個超時函式,該函式將定期呼叫。
source_id = gobject.timeout_add(interval, function, …)
第二個引數是您希望在每個毫秒之後呼叫的回撥函式,該毫秒是第一個引數(間隔)的值。其他引數可以作為函式資料傳遞給回撥函式。
此函式的返回值是 **source_id**。使用它,回撥函式將停止呼叫。
gobject.source_remove(source_id)
回撥函式必須返回 True 才能繼續重複。因此,可以透過返回 False 來停止它。
在下面的程式中,兩個按鈕和兩個標籤被放置在一個頂級視窗上。一個標籤顯示一個遞增的數字。btn1 呼叫 **on_click**,它設定超時函式,間隔為 1000 毫秒(1 秒)。
btn1.connect("clicked", self.on_click)
def on_click(self, widget):
self.source_id = gobject.timeout_add(1000, counter, self)
超時函式命名為 **counter()**。它每 1 秒遞增標籤上的數字。
def counter(timer): c=timer.count+1 print c timer.count=c timer.lbl.set_label(str(c)) return True
第二個按鈕上的回撥刪除超時函式。
btn2.connect("clicked", self.on_stop)
def on_stop(self, widget):
gobject.source_remove(self.source_id)
示例
以下是超時示例的完整程式碼:
import gtk, gobject
def counter(timer):
c = timer.count+1
print c
timer.count = c
timer.lbl.set_label(str(c))
return True
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_title("Timeout Demo")
self.set_size_request(300, 200)
self.set_position(gtk.WIN_POS_CENTER)
vbox = gtk.VBox(False, 5)
hbox = gtk.HBox(True, 3)
hb = gtk.HBox()
lbl1 = gtk.Label("Counter: ")
hb.add(lbl1)
self.lbl = gtk.Label("")
hb.add(self.lbl)
valign = gtk.Alignment(0.5, 0.5, 0, 0)
valign.add(hb)
vbox.pack_start(valign, True, True, 10)
btn1 = gtk.Button("start")
btn2 = gtk.Button("stop")
self.count = 0
self.source_id = 0
hbox.add(btn1)
hbox.add(btn2)
halign = gtk.Alignment(0.5, 0.5, 0, 0)
halign.add(hbox)
vbox.pack_start(halign, False, True, 10)
self.add(vbox)
btn1.connect("clicked", self.on_click)
btn2.connect("clicked", self.on_stop)
self.connect("destroy", gtk.main_quit)
self.show_all()
def on_click(self, widget):
self.source_id = gobject.timeout_add(1000, counter, self)
def on_stop(self, widget):
gobject.source_remove(self.source_id)
PyApp()
gtk.main()
執行後,視窗底部顯示兩個按鈕。當單擊“開始”按鈕時,標籤上的數字將定期遞增,當單擊“停止”按鈕時,它將停止遞增。
觀察輸出:
廣告