0

我想在 pygtk 中为我的 Django 项目创建一个客户端前端。我的总体想法是有一个主窗口,并且每次用户有一个必须更改屏幕以卸载以前的小部件并加载新的小部件的操作时。例如,如果我有一个登录页面,在用户登录后,他会看到一个客户屏幕。我希望将新屏幕放置在同一个主窗口上,有点像页面堆栈,但没有“返回”功能。我的第一个想法是为每个屏幕创建一个函数,一个 show_login、一个 show_customers_screen 等。这是一个不错的选择还是我应该尝试一个更好的选择。第二个问题与第一个问题有关。我可以在函数内创建回调吗?

例如

This would be a method of MainWindow
def create_login(self):
    ....creating widgets here
    #UnboundLocalError: local variable 'clear_clb' referenced before assignment
    btnlogin.connect('clicked', clear_clb, data=None)


    def clear_clb(widget, data=None):
          ..log in process

我知道为什么我会收到错误。问题是我希望这个函数清除的字段在 create_login 中是本地的。这是正确的方法吗?

4

1 回答 1

0

clear_clb在引用之前定义符号:

def create_login(self):
    # create widgets
    def clear_clb(widget, data=None):
        # log in process
    btnlogin.connect('clicked', clear_clb, data=None)

然而,更常见的,在我看来更具可读性的方法是将小部件的引用保存为以下属性self

def create_login(self):
    # create widgets
    self.btnlogin = gtk.Button(...
    self.btnlogin.connect('clicked', clear_clb)

def clear_clb(self, widget, data=None):
    # log in process
于 2013-10-18T05:54:04.323 回答