2014-01-17 43 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' –