如何将函数处理程序从其他文件导入Python/GTK Builder程序?
我有一个Python脚本,它使用一个glade文件来定义用户界面,并且有很多重复的控件,每个控件用来调整某个活动对象的不同数值属性。因为这些控件很重复,我决定把所有的处理函数放在一个单独的文件里,这样可以让代码更整洁、更易读。以下是一些代码片段:
主文件:
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()
Handlers.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()
当我运行这个程序时,用户界面正常显示,但当我移动滑块时,就出现了这个错误:
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
我对命名空间和作用域有一点了解,但我对Python和面向对象编程还是很菜,所以我不太清楚该怎么做。任何帮助都非常感谢。
2 个回答
0
缺少了 obj
这个参数或者名称。也许你需要导入一些东西并进行赋值,或者把它加到处理函数的参数里?那么 obj
到底应该是什么呢?
0
我觉得你在很多地方都忘记了 self
这个参数。
也就是说,把这个:
class Handlers:
def adjustbottomBracketHeight(widget):
obj.bottomBracketHeight = widget.get_value()
改成
class Handlers:
def adjustbottomBracketHeight(obj, widget):
obj.bottomBracketHeight = widget.get_value()