2014-01-17 100 views
1

我在OpenERP 6.0.3的GTK客戶端中創建了一次性密碼機制。登錄後,GTK客戶端會顯示一個窗口,如下所示輸入一次性密碼。如何禁用GTK中的關閉按鈕?

One Time Password Window

現在我想在窗口左上方禁用關閉按鈕。我怎樣才能做到這一點?我使用Python和代碼來創建窗口是:

編輯

class sms_auth(gtk.Dialog): 

    def run_thread(self): 
     code=self.textbox_code.get_text() 
     self.result = rpc.session.rpc_exec_auth('/object', 'execute', 'res.users', 'check_code', code) 
     return self.result 

    def run(self): 
     self.show_all() 
     res = super(sms_auth, self).run() 
     result = None 
     if res == gtk.RESPONSE_ACCEPT: 
      result = self.run_thread() 

     self.destroy() 
     return result 

    def hide(*args): 
     window.hide() 
     return gtk.TRUE 

    def __init__(self, parent, response): 
     # To use cancel butto add gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, 
     gtk.Dialog.__init__(
      self, 'Sms Authentication', parent, 
      gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, 
      (gtk.STOCK_OK, gtk.RESPONSE_ACCEPT) 
     ) 
     label = gtk.Label("Please enter sms code :") 
     self.parent_widget = parent 
     self.response = False 
     self.db_login_response = response 
     self.connect('delete_event', hide) 

     self.textbox_code = gtk.Entry() 
     label.set_alignment(0,0) 

     table = gtk.Table(1, 7) 
     table.set_homogeneous(False) 
     table.set_col_spacings(40) 
     table.attach(label, 0, 6, 0, 1, ypadding=4) 
     table.attach(self.textbox_code, 5, 6, 0, 1, ypadding=4) 

     self.vbox.pack_start(table,False, False, 0) 
+0

您有一個已經回答了,所以我只是做一個評論:防止窗口clo se/hide幾乎總是一個壞主意。人們犯錯誤,您的應用程序應允許他們取消任何可能被取消的操作。另外:該按鈕不能在視覺上被禁用,它會看起來像一個工作按鈕,但不會做人們所期望的... – jku

回答

2

嘗試這樣

def hide(self, *args): 
    window.hide() 
    return gtk.TRUE 


self.window.connect('delete_event', self.hide) 

注:參見here

import pygtk 
pygtk.require('2.0') 
import gtk 


class DialogExample(gtk.Dialog): 

    def __init__(self, parent=None): 
     gtk.Dialog.__init__(self, "My Dialog", parent, 
      gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, 
      (gtk.STOCK_OK, gtk.RESPONSE_ACCEPT) 
     ) 
     self.set_default_size(150, 100) 
     label = gtk.Label("This is a dialog to display additional information") 
     box = self.get_content_area() 
     box.add(label) 
     self.show_all() 
     self.connect('delete-event', self.delete_event) 

    def delete_event(self, widget, event=None): 
     print "Here" 
     return True 


def main(): 
    # rest in gtk_main and wait for the fun to begin! 
    gtk.main() 
    return 0 


if __name__ == "__main__": 
    DialogExample() 
    main() 
+0

嗨,感謝您的答案。但是我收到以下錯誤: Traceback(最近調用最後一次): 文件「./openerp-client.py」,第135行,在 win.sig_login() 文件「/ home/user/workspace/Sms_authentication/client/bin/modules/gui/main.py「,第1035行,sig_login sms_auth_obj = sms_auth(self.window,res) 文件」/ home/user/workspace/Sms/client/bin/modules/gui/main.py「,第1655行,在__init__中 self.window.connect('delete_event',hide) AttributeError:'NoneType'對象沒有屬性'connect' –

+1

添加代碼self.connect('delete_event ',隱藏)'在init方法中?我已經更新了代碼,請檢查。 –

+1

嘗試'self.connect('delete_event',self.hide)'。因爲您正在使用'gtk.Dialog' –