【问题标题】:How to disable the close button in GTK?如何禁用 GTK 中的关闭按钮?
【发布时间】:2014-07-25 01:06:52
【问题描述】:

我在 OpenERP 6.0.3 的 GTK 客户端中创建了一次性密码机制。登录后 GTK 客户端会显示一个输入一次性密码的窗口,如下所示。

现在我想禁用窗口左上角的关闭按钮。我怎样才能做到这一点?我正在使用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)

【问题讨论】:

  • 您已经有了答案,所以我将发表评论:防止窗口关闭/隐藏几乎总是一个坏主意。人们会犯错误,您的应用应该允许他们取消任何可能被取消的操作。另外:这个按钮不能在视觉上被禁用,它看起来像一个工作按钮,但不会像人们期望的那样......

标签: python gtk client pygtk openerp


【解决方案1】:

这样试试

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()

【讨论】:

  • 您好,感谢您的回答。但我收到以下错误: 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' object has no attribute 'connect'
  • 在init方法中在哪里添加代码self.connect('delete_event', hide)?我已经更新了代码,请检查。
  • 试试self.connect('delete_event', self.hide)。因为你使用的是gtk.Dialog
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多