2009-12-21 36 views
2

Noob @用python和pygtk編程。如何正確銷燬gtk.Dialog對象/小部件

我正在創建一個應用程序,其中包括用於用戶交互的幾個對話框。

#!usr/bin/env python 
import gtk 
info = gtk.MessageDialog(type=gtk.DIALOG_INFO, buttons=gtk.BUTTONS_OK) 
info.set_property('title', 'Test info message') 
info.set_property('text', 'Message to be displayed in the messagebox goes here') 
if info.run() == gtk.RESPONSE_OK: 
    info.destroy() 

這將顯示我的消息對話框,但是,當你點擊對話框中提出的「確定」按鈕,什麼都不會發生,盒子只是凍結。 我在這裏做錯了什麼?

回答

2

你能給我最後一次機會嗎? ;)

有在你的代碼中的一些錯誤:

  • 你沒有關閉托架

  • 您在​​3210語法是錯誤的:使用:.set_property('property', 'value')

但我認爲他們是複製/粘貼錯誤。

試試這個代碼,它適用於我。也許你忘記了gtk.main()

import gtk 

info = gtk.MessageDialog(buttons=gtk.BUTTONS_OK) 
info.set_property('title', 'Test info message') 
info.set_property('text', 'Message to be displayed in the messagebox goes here') 
response = info.run() 
if response == gtk.RESPONSE_OK: 
    print 'ok' 
else: 
    print response 
info.destroy() 

gtk.main() 
+0

好的。你是對的,我確實有不好的語法,但這只是複製/粘貼錯誤,我的代碼中有正確的語法。 我剛剛嘗試了您的建議,並且它確實打印了'ok',表明測試結果在響應中是正確的,但是,按下OK按鈕後,消息對話框仍然牢牢地凍結在屏幕上。 我必須錯過別的東西。 – 2009-12-21 21:06:44

3

@mg 我的不好。你的代碼是正確的(我猜我的初始代碼也是) 我的對話框仍然在屏幕上的原因是因爲我的gtk.main循環運行在一個單獨的線程上。

因此,所有我必須是在一個

之間
gtk.gdk.threads_enter() 

附上您的代碼(我的修正版)和

gtk.gdk.threads_leave() 

,有它。 感謝您的回覆。

+0

你已經拯救了我的聖誕! – 2010-11-22 23:04:50