Как импортировать обработчики функций из другого файла в программу 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 и Object в целом, поэтому я не знаю точно, что мне следует делать. Любая помощь приветствуется.

2 ответа

Решение

Я думаю, что вы забыли self спор повсюду.

т.е. изменить это:

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

в

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

obj аргументы или имена отсутствуют. возможно, вам нужно что-то импортировать и назначить, или добавить это к аргументам функций-обработчиков? что именно obj должно быть?

Другие вопросы по тегам