0

空き地ファイルを使用して UI を定義する Python スクリプトがあり、多数の繰り返しウィジェットがあり、それぞれが特定のアクティブ オブジェクトの異なる数値属性を調整します。繰り返しになるので、カプセル化と読みやすさのために、すべてのハンドラーを別のファイルに定義することにしました。コードの抜粋を次に示します。

メインファイル:

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()

プログラムを実行すると 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

名前空間とスコープについては少し知っていますが、Python とオブジェクト指向全般については初心者なので、何をすべきか正確にはわかりません。どんな助けでも大歓迎です。

4

2 に答える 2

0

obj引数または名前がありません。おそらく、何かをインポートして割り当てるか、ハンドラー関数の引数に追加する必要がありますか? 正確には何であるobjべきですか?

于 2010-09-28T23:40:29.047 に答える
0

selfあちこちで議論を忘れていると思います。

つまり、これを変更します。

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

class Handlers:
    def adjustbottomBracketHeight(obj, widget):
        obj.bottomBracketHeight = widget.get_value()
于 2010-09-28T23:41:06.263 に答える