代码之家  ›  专栏  ›  技术社区  ›  heltonbiker

如何将函数处理程序从其他文件导入Python/GTK生成器程序?

  •  0
  • heltonbiker  · 技术社区  · 14 年前

    主文件:

    import pygtk
    pygtk.require('2.0')
    import gtk, gobject, cairo, gtk.glade
    
    from Handlers import Handlers
    from FramesetParameters import FramesetParameters
    from GeometricRules import GeometricRules
    from BikeDrawing import BikeDrawing
    
    p=FramesetParameters("fitting", "handling", "construction")
    
    builder = gtk.Builder()
    builder.add_from_file("FramesetDesignerUI.glade")
    Handlers(p)
    builder.connect_signals(Handlers.__dict__)
    
    mainWindow = builder.get_object("mainWindow")    
    mainWindow.show_all()
    gtk.main()
    

    这个处理程序.py文件:

    class Handlers:
        def adjustbottomBracketHeight(widget):
            obj.bottomBracketHeight = widget.get_value()
    
        def adjustseatTubeAngle(widget):
            obj.seatTubeAngle = widget.get_value()
    
        def adjustseatTubeLength(widget):
            obj.seatTubeLength = widget.get_value()
    
        def adjusttopTubeLength(widget):
            obj.topTubeLength = widget.get_value()
    
        def adjustheadTubeAngle(widget):
            obj.headTubeAngle = widget.get_value()
    
        def adjustheadTubeTopHeight(widget):
            obj.headTubeTopHeight = widget.get_value()
    
        def adjustrearAxlePosition(widget):
            obj.rearAxlePosition = widget.get_value()
    
        def adjusttrail(widget):
            obj.trail = widget.get_value()
    
        def adjustseatTubeExtension(widget):
            obj.seatTubeExtension = widget.get_value()
    
        def adjustheadTubeUpperExtension(widget):
            obj.headTubeUpperExtension = widget.get_value()
    
        def adjustheadTubeLowerExtension(widget):
            obj.headTubeLowerExtension = widget.get_value()
    
        def adjustforkCrownBulk(widget):
            obj.forkCrownBulk = widget.get_value()
    

    当我运行程序时,GUI会正确显示,但当我移动滑块时会出现以下错误:

    Traceback (most recent call last):
      File "/home/helton/Dropbox/Profilez/00Computacional/00REFACTORY97/Handlers.py", line 6, in adjustseatTubeAngle
        obj.seatTubeAngle = widget.get_value()
    NameError: global name 'obj' is not defined
    

    2 回复  |  直到 14 年前
        1
  •  0
  •   André Caron    14 年前

    我想你忘了 self

    i、 e.更改此项:

    class Handlers:
        def adjustbottomBracketHeight(widget):
            obj.bottomBracketHeight = widget.get_value()
    

    class Handlers:
        def adjustbottomBracketHeight(obj, widget):
            obj.bottomBracketHeight = widget.get_value()
    
        2
  •  0
  •   Blazer    14 年前

    这个 obj 缺少参数或名称。也许您需要导入一些东西并分配它,或者将它添加到处理函数的参数中?到底是什么原因 目标 应该是吗?