table.attach 2 childs übergeben.

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Krumnix
User
Beiträge: 10
Registriert: Mittwoch 11. Juli 2018, 09:44

Hallo.

Ich würde gerne in eine gtk.table 2 unterschiedliche childs übergeben.

Code: Alles auswählen

myTableTC3.attachToCell(plcImage(plcSymbol=PLC_STAT_PLC_POS_ACTIVE  %i, imageTrue=ICON_GREEN,    imageFalse=ICON_GRAY), col=1,row=4, xpadding=xpadding, ypadding=ypadding)
Würde ich gerne so umsetzen, dass "plcSymbol" 2x übergeben wird, sprich in der Zelle dann 2 Einträge sind.

Jemand einen Tipp?
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Krumnix: Das sieht irgendwie nicht nach Gtk aus. Gtk verwendet beispielsweise auch die in Python übliche Namensschreibweise, also klein_mit_unterstrichen für alles ausser Klassen (MixedCase) und Konstanten (KOMPLETT_GROSSBUCHSTABEN). Eine `attach_to_cell()`-Methode gibt es bei `Gtk.Table` nicht. Die Klasse ist zu dem „deprecated“ und man sollte `Gtk.Grid` stattdessen verwenden.

`my` ist ein unsinniger Namenspräfix. Was soll der denn hier bedeuten?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Krumnix
User
Beiträge: 10
Registriert: Mittwoch 11. Juli 2018, 09:44

Das ist aus einer Steuerung im Maschinenbau. Der Steuerungsbauer bietet Python an, um Masken zu beschreiben und zu animieren.
Die Class attachToCell basiert auf GTK.

Code: Alles auswählen

class table(gtk.Table):
    """
    This class returns a simple gtk.Table.

    Parameter see gtk.Table

    """
    instanceCounter = 0
    def __init__(self,rows=1, columns=1, homogeneous=False):
        #print 'INFO %s.%s() [%s]' %(type(self).__name__, sys._getframe().f_code.co_name, table.instanceCounter)
        table.instanceCounter += 1
        gtk.Table.__init__(self, rows=rows, columns=columns, homogeneous=homogeneous)

    def __del__(self):
        """ destructor """
        #print 'INFO %s.%s() [%s]' %(type(self).__name__, sys._getframe().f_code.co_name, table.instanceCounter)
        table.instanceCounter -= 1

    def attachToCell (self, child, col, row, xoptions = gtk.FILL, yoptions = gtk.SHRINK, xpadding = 0, ypadding = 0, xalign = 0):
        """
        Attach the child into a specified cell
        """
        try: child.set_property( 'xalign' , xalign )
        except: pass

        left_attach    = col
        right_attach   = col + 1
        top_attach     = row
        bottom_attach  = row + 1
        self.attach(child, left_attach, right_attach, top_attach, bottom_attach, xoptions=xoptions, yoptions=yoptions, xpadding=xpadding, ypadding=ypadding)

        self.show_all( )
self.attach(child <- da möchte ich hin, dass ich hier mehrere childs vom Typ plcimage übergeben kann....
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

`attachToCell` ist keine Klasse sondern eine Methode. Klassen geben auch nichts zurück wie im DocString der Klasse behauptet wird.

`__del__()` ist *kein* Destruktor und Python garantiert weder wann oder ob diese Methode überhaupt aufgerufen wird. Dagegen kann die blosse Existenz unter bestimmten Umständen zu Speicherlecks führen. Es gibt nur sehr wenige Gründe diese Methode überhaupt zu implementieren und wenn dann sollte man sich gut mit der Speicherverwaltung von Python auskennen.

Man sollte kein nackte ``except:`` ohne konkrete Ausnahme(n) verwenden. Schon gar nicht wenn man die Ausnahmebehandlung dann einfach nur aus einem ``pass`` besteht. ``pass`` würde ich an der Stelle auch immer kommentieren, damit man erkennt das es a) Absicht war da nichts zu tun und b) vielleicht auch den Grund erfährt warum es okay ist die Ausnahmen an der Stelle einfach zu ignorieren und so weiter zu machen als sei nichts passiert.

Mehrere Widgets pro Zelle geht nicht. Der andere Weg geht ja schon, mehrere Zellen für das Widget. Du kannst natürlich einen `gtk.Frame` erstellen, da rein stecken was Du möchtest und den dann in eine `gtk.Table`-Zelle stecken.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Krumnix
User
Beiträge: 10
Registriert: Mittwoch 11. Juli 2018, 09:44

Ja, deine Argumente sind soweit ok, aber an dieser "class" und ihren Methoden kann ich nix ändern : 8)
Ist vom Systemlieferant so vorgegebenen.

Die Idee mit einem Frame in eine Zelle zu stecken hab ich garnicht im Kopf gehabt.
Danke für den Tipp
Antworten