【问题标题】:Pygtk client appPygtk 客户端应用程序
【发布时间】:2013-10-18 13:54:14
【问题描述】:

我想在 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 中是本地的。这是正确的方法吗?

【问题讨论】:

    标签: python gtk pygtk


    【解决方案1】:

    在引用之前定义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
    

    【讨论】:

    • 所以我必须将所有“屏幕”及其小部件子作为 MainWindows 属性来实现我想要的?
    • 您计划稍后使用的所有小部件,是的。如果你不想这样做,你可以使用 upper 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 2013-10-29
    • 2012-07-19
    • 1970-01-01
    相关资源
    最近更新 更多