Come importare i gestori delle funzioni da altri file a un programma Python / GTK Builder?

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

  •  26-09-2019
  •  | 
  •  

Domanda

Ho uno script Python che utilizza un file glade di definire la sua interfaccia utente, e ha un sacco di widget ripetitivi, ognuno per regolare un attributo numerico diverso di un certo oggetto attivo. Dal momento che è ripetitivo, ho deciso di definire tutti i gestori in un file separato per l'incapsulamento e la leggibilità. Ecco alcuni estratti di codice:

Il file principale:

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

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

Quando eseguo il programma, gli spettacoli GUI correttamente, ma quando mi sposto un dispositivo di scorrimento ottengo questo errore:

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

so un po 'di spazi dei nomi e campo di applicazione, ma sono molto niubbo su Python e di orientamento oggetto in generale, quindi non so exactely cosa devo fare. Qualsiasi aiuto sarebbe molto apprezzato.

È stato utile?

Soluzione

Credo che tu abbia dimenticato l'argomento self tutto il luogo.

vale a dire. cambiare questo:

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

a

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

Altri suggerimenti

gli argomenti obj oi nomi sono mancanti. forse avete bisogno di importare qualcosa e assegnarlo, o aggiungerlo agli argomenti per le funzioni di gestione? che cosa è esattamente il obj dovrebbe essere?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top