Wie Funktion Handler aus anderer Datei in einen Python / GTK Builder Programm importieren?

StackOverflow https://stackoverflow.com/questions/3817758

  •  26-09-2019
  •  | 
  •  

Frage

Ich habe ein Python-Skript, das eine Glade-Datei verwendet, um seine Benutzeroberfläche zu definieren, und hat eine Menge von sich wiederholenden Widgets, von denen jeder eine andere numerische Attribut eines bestimmten aktiven Objekt einzustellen. Da es sich wiederholt, entschied ich mich für die Verkapselung und Lesbarkeit alle Handler in einer separaten Datei zu definieren. Hier sind einige Code-Auszüge:

Die Hauptdatei:

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

Die Handlers.py-Datei:

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

Wenn ich das Programm ausführen, die GUI zeigt sich richtig, aber wenn ich einen Schieber bewegen bekomme ich diesen Fehler:

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

Ich weiß ein wenig über Namespaces und Umfang, aber ich bin sehr Noob auf Python und Object Orientieren im Allgemeinen, so dass ich weiß nicht, exactely was ich tun soll. Jede Hilfe wäre sehr geschätzt.

War es hilfreich?

Lösung

Ich glaube, Sie das self Argument vergessen haben alle über den Platz.

d. ändern diese:

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

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

Andere Tipps

die obj Argumente oder Namen fehlen. vielleicht müssen Sie etwas importieren und zuweisen, oder es für die Handler-Funktionen auf die Argumente hinzufügen? was genau ist die obj denn sein?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top