Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: programma voor verplaatsen van buttens (links-rechts)  (gelezen 4252 keer)

programma voor verplaatsen van buttens (links-rechts)
« Gepost op: 2010/03/24, 19:14:41 »
ben even aan het prutsen geweest met pyton en omdat ik merk dat er veel gevraagt wordt "hoe verplaats ik de buttens enz hier klein programmatje
http://sites.google.com/site/verhelstgregory/ubuntu-instellingen/desktop/window_controls.py?attredirects=0&d=1
#!/usr/bin/env python
#
# @version 0.1
# @author verhelstgregory(at)gmail(dot)com
#

import gtk
import gconf
  
def callback(button, client):
    global left, right, key, entry
    if left.get_active():
     s = "maximize,minimize,close:"
    elif right.get_active():
     s = ":maximize,minimize,close"
    else:
     s = entry.get_text()
    client.set_string (key, s)
    entry.set_text(s)

# Gconf stuff
client = gconf.client_get_default ()
key = "/apps/metacity/general/button_layout"

# Gtk window
window = gtk.Window()
window.set_title("instellingen")
left = gtk.RadioButton(group=None, label='links')
right = gtk.RadioButton(left, 'Rechts')
custom = gtk.RadioButton(left, 'andere')
entry = gtk.Entry()
box = gtk.VBox(False, 0)
box.add(gtk.Label("kies window controls position: "))
box.add(left)
box.add(right)
# Custom
box2 = gtk.HBox(False, 0)
box2.add(custom)
#box2.add(entry)
box.add(box2)
box.add(entry)
done = gtk.Button('toepassen & sluiten')
box3 = gtk.HBox(False, 0)
box3.add(done)
box.add(box3)
custom.set_active(True)
window.add (box)
window.show_all ()

# Widget events
window.connect('delete_event', gtk.main_quit)
done.connect('clicked', gtk.main_quit)
left.connect ('toggled', callback, client)
right.connect ('toggled', callback, client)
custom.connect ('toggled', callback, client)

# If key isn't writable, then set insensitive
left.set_sensitive (client.key_is_writable (key))
right.set_sensitive (client.key_is_writable (key))

# Get current settings
entry.set_text(client.get_string(key))

gtk.main ()
 
opmerkingen en sugesties altijd welkom
(sorry als dit verkeert staat)

Re: programma voor verplaatsen van buttens (links-rechts)
« Reactie #1 Gepost op: 2010/03/24, 19:47:44 »
Ik heb niet zo veel verstand van programmeren, met Gnomeconfigurator wordt het zo gedaan
knoppen rechts  menu:minimize,maximize,close
knoppen links    close,maximize,minimize:menu

Misschien kan je er iets mee?
In der Beschränkung zeigt sich der Meister.

Re: programma voor verplaatsen van buttens (links-rechts)
« Reactie #2 Gepost op: 2010/03/24, 19:58:35 »
Ik heb niet zo veel verstand van programmeren, met Gnomeconfigurator wordt het zo gedaan
knoppen rechts  menu:minimize,maximize,close
knoppen links    close,maximize,minimize:menu

Misschien kan je er iets mee?
dat programma doet dat gwn je moet enkel links , of recht selecteren ;) voor mensen die niet graag gconfig gebruiken

Re: programma voor verplaatsen van buttens (links-rechts)
« Reactie #3 Gepost op: 2010/03/24, 20:03:23 »
Ik ben zo vrij geweest om het wat aan te passen en te verbeteren :).

#!/usr/bin/env python


import pygtk
import gtk
import gconf


class ChangeButtonOrder:
    def __init__(self):
        self.client = gconf.client_get_default ()
        self.key = "/apps/metacity/general/button_layout"

        window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        window.connect("delete_event", self.close_app)
        window.set_title("Vensterknoppen instellen...")
        window.resize(360, 140)

        vbox = gtk.VBox()

        label = gtk.Label("Kies een positie:")
        vbox.pack_start(label, False, False, 8)

        table = gtk.Table()
        self.left = gtk.RadioButton(None, "Links")
        self.left.set_sensitive(self.client.key_is_writable(self.key))
        self.right = gtk.RadioButton(self.left, "Rechts")
        self.right.set_sensitive(self.client.key_is_writable(self.key))
        self.custom = gtk.RadioButton(self.left, "Andere:")
        self.entry = gtk.Entry()
        self.entry.set_text(self.client.get_string(self.key))
        table.attach(self.left, 0, 1, 0, 1, gtk.FILL, gtk.SHRINK)
        table.attach(self.right, 0, 1, 1, 2, gtk.FILL, gtk.SHRINK)
        table.attach(self.custom, 0, 1, 2, 3, gtk.FILL, gtk.SHRINK)
        table.attach(self.entry, 1, 2, 2, 3, xpadding=10)
        vbox.pack_start(table, False, False)

        bbox = gtk.HButtonBox()
        bbox.set_layout(gtk.BUTTONBOX_END)
        buttonapply = gtk.Button(stock=gtk.STOCK_APPLY)
        buttonapply.connect('clicked', self.buttonapply_clicked)
        bbox.pack_start(buttonapply)
        buttonquit = gtk.Button(stock=gtk.STOCK_QUIT)
        buttonquit.connect('clicked', self.close_app)
        bbox.pack_start(buttonquit)
        vbox.pack_start(bbox, False, False, 8)

        window.add(vbox)
        window.show_all()

    def close_app(self, widget, event=None):
        gtk.main_quit()
        return False

    def buttonapply_clicked(self, widget):
        if self.left.get_active():
        s = "maximize,minimize,close:menu"
        elif self.right.get_active():
        s = "menu:minimize,maximize,close"
        else:
        s = self.entry.get_text()
        self.client.set_string(self.key, s)
        self.entry.set_text(s)


def main():
    gtk.main()

if __name__ == '__main__':
    app = ChangeButtonOrder()
    main()

Re: programma voor verplaatsen van buttens (links-rechts)
« Reactie #4 Gepost op: 2010/03/24, 20:14:08 »
Ik heb niet zo veel verstand van programmeren, met Gnomeconfigurator wordt het zo gedaan
knoppen rechts  menu:minimize,maximize,close
knoppen links    close,maximize,minimize:menu

Misschien kan je er iets mee?
dat programma doet dat gwn je moet enkel links , of recht selecteren ;) voor mensen die niet graag gconfig gebruiken
Dat zou inderdaad makkelijk zijn, de Gconf is wel lastig. :)
In der Beschränkung zeigt sich der Meister.

Offline Tom

  • Lid
Re: programma voor verplaatsen van buttens (links-rechts)
« Reactie #5 Gepost op: 2010/03/24, 20:18:40 »
Dat zou inderdaad makkelijk zijn, de Gconf is wel lastig. Smiley  Meen je dat echt  ???
Netbook Xuby Xenial 16.04.5 Lts (totaal gestripte versie). Desktop Xuby Bionic 18.04.6 Lts Gestripte versie - Laptop Xuby Bionic 18.04.6 Lts. Ubuntu CoC Signed.Yes.

Re: programma voor verplaatsen van buttens (links-rechts)
« Reactie #6 Gepost op: 2010/03/24, 20:20:13 »
Ik ben zo vrij geweest om het wat aan te passen en te verbeteren :).

#!/usr/bin/env python


import pygtk
import gtk
import gconf


class ChangeButtonOrder:
    def __init__(self):
        self.client = gconf.client_get_default ()
        self.key = "/apps/metacity/general/button_layout"

        window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        window.connect("delete_event", self.close_app)
        window.set_title("Vensterknoppen instellen...")
        window.resize(360, 140)

        vbox = gtk.VBox()

        label = gtk.Label("Kies een positie:")
        vbox.pack_start(label, False, False, 8)

        table = gtk.Table()
        self.left = gtk.RadioButton(None, "Links")
        self.left.set_sensitive(self.client.key_is_writable(self.key))
        self.right = gtk.RadioButton(self.left, "Rechts")
        self.right.set_sensitive(self.client.key_is_writable(self.key))
        self.custom = gtk.RadioButton(self.left, "Andere:")
        self.entry = gtk.Entry()
        self.entry.set_text(self.client.get_string(self.key))
        table.attach(self.left, 0, 1, 0, 1, gtk.FILL, gtk.SHRINK)
        table.attach(self.right, 0, 1, 1, 2, gtk.FILL, gtk.SHRINK)
        table.attach(self.custom, 0, 1, 2, 3, gtk.FILL, gtk.SHRINK)
        table.attach(self.entry, 1, 2, 2, 3, xpadding=10)
        vbox.pack_start(table, False, False)

        bbox = gtk.HButtonBox()
        bbox.set_layout(gtk.BUTTONBOX_END)
        buttonapply = gtk.Button(stock=gtk.STOCK_APPLY)
        buttonapply.connect('clicked', self.buttonapply_clicked)
        bbox.pack_start(buttonapply)
        buttonquit = gtk.Button(stock=gtk.STOCK_QUIT)
        buttonquit.connect('clicked', self.close_app)
        bbox.pack_start(buttonquit)
        vbox.pack_start(bbox, False, False, 8)

        window.add(vbox)
        window.show_all()

    def close_app(self, widget, event=None):
        gtk.main_quit()
        return False

    def buttonapply_clicked(self, widget):
        if self.left.get_active():
         s = "maximize,minimize,close:menu"
        elif self.right.get_active():
         s = "menu:minimize,maximize,close"
        else:
         s = self.entry.get_text()
        self.client.set_string(self.key, s)
        self.entry.set_text(s)


def main():
    gtk.main()

if __name__ == '__main__':
    app = ChangeButtonOrder()
    main()
ik ken er niet zoveel van maar zou je het terug kunnen aanpassen (als je links en rechts klikt je terug ziet dat de knoppen verspringen en maar 1 knop toepassen en sluiten)
edit: misschien ook wat uitleg voor  een beginnende python gebruiker (had dit gekopieerd en wat aangepast en vertaalt)
« Laatst bewerkt op: 2010/03/24, 20:23:02 door verhelsttje »

Re: programma voor verplaatsen van buttens (links-rechts)
« Reactie #7 Gepost op: 2010/03/24, 20:26:57 »
Hmm, wat doet "vbox = gtk.VBox()" in je script? ???

Ik gebruik op dit moment even geen 10.04, maar dat VBox-stukje lijkt me hier nogal onnodig.

En s = "menu:minimize,maximize,close"

Moet zijn:

s = "menu:maximize,minimize,close"

Anders breek je het standaard thema van 10.04

Offline Ronnie

  • Lid
    • ronnie.vd.c
Re: programma voor verplaatsen van buttens (links-rechts)
« Reactie #8 Gepost op: 2010/03/24, 20:27:48 »
Ik heb nog een kleine aanpassing gemaakt. Een tekst die aangeeft of je de rechten hebt om de knoppen te veranderen, ipv de links en rechts te blokkeren. En de knoppen aangepast en toepassen geactiveerd te laten.

#!/usr/bin/env python


import pygtk
import gtk
import gconf


class ChangeButtonOrder:
    '''De hoofdklasse van het programma (in dit geval is er maar 1)
    Deze word onderaan het script aangeroepen met:
    app = ChangeButtonOrder()
    '''
    def __init__(self):
        '''Deze functie wordt meteen opgeroepen, zodra de klasse aangemaakt wordt'''
        self.client = gconf.client_get_default ()
        self.key = "/apps/metacity/general/button_layout"

        # Maakt een hoofdvenster aan
        window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        # Sluit het programma als er op X wordt gedrukt
        window.connect("delete_event", self.close_app)
        # Zet de window titel
        window.set_title("Vensterknoppen instellen...")
        # Zet de afmetingen van het venster
        window.resize(360, 140)

        # Maakt een verticale layout, waarin verschillende items
        # onder elkaar gestapeld kunnen worden
        vbox = gtk.VBox()

        # Vraagt of de gebruiker de key mag wijzigen en maakt de label aan met de juiste tekst
        if self.client.key_is_writable(self.key):
            label = gtk.Label("Kies een positie:")
        else:
            label = gtk.Label("U heeft geen rechten om de positie te veranderen")
       
        # Zet het label bovenin het venster
        vbox.pack_start(label, False, False, 8)
       
        # Maakt een tabel met daarin de radio buttons en entry
        if self.client.key_is_writable(self.key):
            table = gtk.Table()
            self.left = gtk.RadioButton(None, "Links")
            self.right = gtk.RadioButton(self.left, "Rechts")
            self.custom = gtk.RadioButton(self.left, "Andere:")
            self.entry = gtk.Entry()
            # Vul de entry met de huidige waarde uit gconf
            self.entry.set_text(self.client.get_string(self.key))
            # Zet de posities in de tabel)
            table.attach(self.left, 0, 1, 0, 1, gtk.FILL, gtk.SHRINK)
            table.attach(self.right, 0, 1, 1, 2, gtk.FILL, gtk.SHRINK)
            table.attach(self.custom, 0, 1, 2, 3, gtk.FILL, gtk.SHRINK)
            table.attach(self.entry, 1, 2, 2, 3, xpadding=10)
            # Zet de tabel als 2e item in de verticale layout
            vbox.pack_start(table, False, False)

        # Maakt een knoppenbox aan
        bbox = gtk.HButtonBox()
        bbox.set_layout(gtk.BUTTONBOX_END)
        # Zet de knop "Toepassen" alleen erin als de gebruiker de rechten heeft
        if self.client.key_is_writable(self.key):
            buttonapply = gtk.Button(stock=gtk.STOCK_APPLY)
            # Voert de functie "buttonapply_clicked" uit in deze(self) klasse (ChangeButtonOrder)
            buttonapply.connect('clicked', self.buttonapply_clicked)
            # Zet de button in de button box
            bbox.pack_start(buttonapply)
        buttonquit = gtk.Button(stock=gtk.STOCK_QUIT)
        # Voert de functie "close_app" uit in deze(self) klasse (ChangeButtonOrder)
        buttonquit.connect('clicked', self.close_app)
        # Zet de button in de buttonbox
        bbox.pack_start(buttonquit)
        # Zet de buttonbox als laatste in de verticale layout
        vbox.pack_start(bbox, False, False, 8)

        # Voeg de verticale layout toe aan het hoofdvenster
        window.add(vbox)
        # Laat alle knoppen etc zien (want die zijn standaard verborgen)
        window.show_all()

    def close_app(self, widget, event=None):
        '''Functie die het programma afsluit'''
        gtk.main_quit()
        return False

    def buttonapply_clicked(self, widget):
        '''Functie die de waarden in gconf veranderd'''
        if self.left.get_active(): # als "links" gekozen is
        s = "maximize,minimize,close:menu"
        elif self.right.get_active(): # als "rechts" gekozen is
        s = "menu:maximize,minimize,close"
        else:
        s = self.entry.get_text()
        # Zet de nieuwe waarde in gconf
        self.client.set_string(self.key, s)
        # Vul de entry met de nieuwe waarde
        self.entry.set_text(s)

# Geen idee wat het precies doet
# maar dit hoort gewoon zo in elke gtk app
def main():
    gtk.main()

# Voer alleen uit als dit het main script is
# dus niet als deze vanuit een ander script opgeroepen wordt
if __name__ == '__main__':
    # Defineer het programma
    app = ChangeButtonOrder()
    # Start het programma
    main()

'''
# wat is 'self'
self slaat op de klasse waarin deze staat.

Alle variabelen die je in een klasse met self.<naam> definieert kun je vanuit de hele klasse oproepen.
Je kunt deze variabelen ook aan als je een 'instantie' van die klasse maakt. Zie het voorbeeld hieronder

class Test
    def __init__(self):
        self.title = 'Hello World!'
    def change_title(self, title):
        self.title = title
    def print_title(self):
        print self.title

t = Test()
print t.title #neemt nu de variabele "Test -> self.title" en print: Hello World
t.change_title("Hallo verhelsttje")
print t.title #print: Hallo verhelsttje
t.print_title() # print ook: Hallo verhelsttje
'''

EDIT: Commentaar toegevoegd
« Laatst bewerkt op: 2010/03/24, 21:03:00 door Ronnie »
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Documentatie Terminal

Re: programma voor verplaatsen van buttens (links-rechts)
« Reactie #9 Gepost op: 2010/03/24, 20:34:54 »
Verhelsstje: ik denk niet dat ik nu nog wat tijd heb, maar zal morgen wat uitleg bijzetten als ge dit wilt.

Vistaus: "vbox = gtk.VBox()" maakt een verticale box waarin ik de widget zet: label, table (met de radiobuttons) en buttonbox.
Dat van die volgorde wist ik niet. Ik heb dit getest op Karmic en mijn volgorde was niet meer correct :).

Ronnie: Inderdaad, zo is het natuurlijk wat beter dan gewoon de radiobuttons te blokkeren.

Re: programma voor verplaatsen van buttens (links-rechts)
« Reactie #10 Gepost op: 2010/03/24, 20:39:38 »
Op Karmic is het ook geen probleem, maar met het thema van Lucid wel.

Merci trouwens voor de uitleg over vbox, dacht even dat het iets te maken had met VirtualBox ;)

Re: programma voor verplaatsen van buttens (links-rechts)
« Reactie #11 Gepost op: 2010/03/24, 20:53:47 »
heb het een beetje aangepast
momenteel heb ik dit:
#!/usr/bin/env python
#
# @version 0.1
# @author verhelstgregory(at)gmail(dot)com
#

import gtk
import gconf
   
def callback(button, client):
    global left, right, key, entry
    if left.get_active():
    s = "maximize,minimize,close:"
    elif right.get_active():
    s = ":maximize,minimize,close"
    else:
    s = entry.get_text()
    client.set_string (key, s)
    entry.set_text(s)

# Gconf stuff
client = gconf.client_get_default ()
key = "/apps/metacity/general/button_layout"

# Gtk window
window = gtk.Window()
window.set_title("vensterknoppen instellingen")
window.resize(360, 140)
left = gtk.RadioButton(group=None, label='links')
right = gtk.RadioButton(left, 'Rechts')
custom = gtk.RadioButton(left, 'andere')
entry = gtk.Entry()
box = gtk.VBox(False, 0)
box.add(gtk.Label("kies een position: "))
box.add(left)
box.add(right)

# Custom
box2 = gtk.HBox(False, 0)
box2.add(custom)
#box2.add(entry)
box.add(box2)
box.add(entry)
done = gtk.Button('sluiten')
box3 = gtk.HBox(False, 0)
box3.add(done)
box.add(box3)
custom.set_active(True)
window.add (box)
window.show_all ()

# Widget events
window.connect('delete_event', gtk.main_quit)
done.connect('clicked', gtk.main_quit)
left.connect ('toggled', callback, client)
right.connect ('toggled', callback, client)
custom.connect ('toggled', callback, client)

# If key isn't writable, then set insensitive
left.set_sensitive (client.key_is_writable (key))
right.set_sensitive (client.key_is_writable (key))

# Get current settings
entry.set_text(client.get_string(key))

gtk.main ()



ik wil het zo houden alleen wil ik het invoeg venster naast andere en niet actief bij links en rechts (als je het uittest zal je zien dat de buttens zicch direct aanpassen , vandaar enkel een sluitknop) en dat wil ik zo houden is dat mogelijk ?

Offline chris.

  • Lid
    • http://www.linuxmintusers.be
Re: programma voor verplaatsen van buttens (links-rechts)
« Reactie #12 Gepost op: 2010/03/24, 20:56:21 »
handig op zich :)

iig makkelijker dan ubuntu tweak installeren om het te veranderen.

Offline Ronnie

  • Lid
    • ronnie.vd.c
Re: programma voor verplaatsen van buttens (links-rechts)
« Reactie #13 Gepost op: 2010/03/24, 21:04:14 »
Ik heb bij mijn bovenstaande bericht commentaar tussen de code toegevoegd

EDIT: hier mijn nieuwe versie, die meteen update (tevens met commentaar):

verhelsttje, kijk eens goed naar het verschil in opbouw in de code. Wat zijn de verschillen en waarom is de versie van nunslaugter zo anders. Hiermee leer je beter/overzichtelijker programmeren.
#!/usr/bin/env python


import pygtk
import gtk
import gconf


class ChangeButtonOrder:
    '''De hoofdklasse van het programma (in dit geval is er maar 1)
    Deze word onderaan het script aangeroepen met:
    app = ChangeButtonOrder()
    '''
    def __init__(self):
        '''Deze functie wordt meteen opgeroepen, zodra de klasse aangemaakt wordt'''
        self.client = gconf.client_get_default ()
        self.key = "/apps/metacity/general/button_layout"

        # Maakt een hoofdvenster aan
        window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        # Sluit het programma als er op X wordt gedrukt
        window.connect("delete_event", self.close_app)
        # Zet de window titel
        window.set_title("Vensterknoppen instellen...")
        # Zet de afmetingen van het venster
        window.resize(400, 140)

        # Maakt een verticale layout, waarin verschillende items
        # onder elkaar gestapeld kunnen worden
        vbox = gtk.VBox()

        # Vraagt of de gebruiker de key mag wijzigen en maakt de label aan met de juiste tekst
        if self.client.key_is_writable(self.key):
            label = gtk.Label("Kies een positie:")
        else:
            label = gtk.Label("U heeft geen rechten om de positie te veranderen")
        
        # Zet het label bovenin het venster
        vbox.pack_start(label, False, False, 8)
        
        # Maakt een tabel met daarin de radio buttons en entry
        if self.client.key_is_writable(self.key):
            table = gtk.Table()
            self.left = gtk.RadioButton(None, "Links")
            self.left.connect('toggled', self.change_order)
            self.right = gtk.RadioButton(self.left, "Rechts")
            self.right.connect('toggled', self.change_order)
            self.custom = gtk.RadioButton(self.left, "Andere:")
            self.custom.connect('toggled', self.enable_custom)
            self.entry = gtk.Entry()
            # Vul de entry met de huidige waarde uit gconf
            self.entry.set_text(self.client.get_string(self.key))
            self.entry.set_sensitive(False)
            # Voegt een knop toe om de custom entry toe te passen
            self.buttonapply = gtk.Button(stock=gtk.STOCK_APPLY)
            self.buttonapply.set_sensitive(False)
            # Voert de functie "buttonapply_clicked" uit in deze(self) klasse (ChangeButtonOrder)
            self.buttonapply.connect('clicked', self.change_order)
            
            # Zet de posities in de tabel)
            table.attach(self.left, 0, 1, 0, 1, gtk.FILL, gtk.SHRINK)
            table.attach(self.right, 0, 1, 1, 2, gtk.FILL, gtk.SHRINK)
            table.attach(self.custom, 0, 1, 2, 3, gtk.FILL, gtk.SHRINK)
            table.attach(self.entry, 1, 2, 2, 3, xpadding=10)
            table.attach(self.buttonapply, 2, 3, 2, 3, gtk.FILL, gtk.SHRINK)
            # Zet de tabel als 2e item in de verticale layout
            vbox.pack_start(table, False, False)

        # Maakt een knoppenbox aan
        bbox = gtk.HButtonBox()
        bbox.set_layout(gtk.BUTTONBOX_END)
        buttonquit = gtk.Button(stock=gtk.STOCK_QUIT)
        # Voert de functie "close_app" uit in deze(self) klasse (ChangeButtonOrder)
        buttonquit.connect('clicked', self.close_app)
        # Zet de button in de buttonbox
        bbox.pack_start(buttonquit)
        # Zet de buttonbox als laatste in de verticale layout
        vbox.pack_start(bbox, False, False, 8)

        # Voeg de verticale layout toe aan het hoofdvenster
        window.add(vbox)
        # Laat alle knoppen etc zien (want die zijn standaard verborgen)
        window.show_all()

    def close_app(self, widget, event=None):
        '''Functie die het programma afsluit'''
        gtk.main_quit()
        return False

    def change_order(self, widget):
        '''Functie die de waarden in gconf veranderd'''
        if self.left.get_active(): # als "links" gekozen is
         s = "maximize,minimize,close:menu"
        elif self.right.get_active(): # als "rechts" gekozen is
         s = "menu:maximize,minimize,close"
        else:
         s = self.entry.get_text()
        # Zet de nieuwe waarde in gconf
        self.client.set_string(self.key, s)
        # Vul de entry met de nieuwe waarde
        self.entry.set_text(s)
        
    def enable_custom(self, widget):
        # Maakt de entry en apply button actief als "anders" is aangevinkt
        self.entry.set_sensitive(widget.get_active())
        self.buttonapply.set_sensitive(widget.get_active())
            

# Geen idee wat het precies doet
# maar dit hoort gewoon zo in elke gtk app
def main():
    gtk.main()

# Voer alleen uit als dit het main script is
# dus niet als deze vanuit een ander script opgeroepen wordt
if __name__ == '__main__':
    # Defineer het programma
    app = ChangeButtonOrder()
    # Start het programma
    main()

'''
# wat is 'self'
self slaat op de klasse waarin deze staat.

Alle variabelen die je in een klasse met self.<naam> definieert kun je vanuit de hele klasse oproepen.
Je kunt deze variabelen ook aan als je een 'instantie' van die klasse maakt. Zie het voorbeeld hieronder

class Test
    def __init__(self):
        self.title = 'Hello World!'
    def change_title(self, title):
        self.title = title
    def print_title(self):
        print self.title

t = Test()
print t.title #neemt nu de variabele "Test -> self.title" en print: Hello World
t.change_title("Hallo verhelsttje")
print t.title #print: Hallo verhelsttje
t.print_title() # print ook: Hallo verhelsttje
'''
« Laatst bewerkt op: 2010/03/24, 21:21:12 door Ronnie »
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Documentatie Terminal

Re: programma voor verplaatsen van buttens (links-rechts)
« Reactie #14 Gepost op: 2010/03/24, 21:41:47 »
Ziet er heel goed uit ronnie!

Het is inderdaad veel betere code dan in het origineel. Een klasse is misschien niet nodig, maar gebruik toch zeker functies die de code wat opsplits en leesbaarder maakt.

Offline Ronnie

  • Lid
    • ronnie.vd.c
Re: programma voor verplaatsen van buttens (links-rechts)
« Reactie #15 Gepost op: 2010/03/24, 21:43:54 »
Nog even een stukje toegevoegd, wat de huidige configuratie selecteerd. Heb je de knoppen links staan, dan staat links automatisch aan. Bij rechts, de radiobutton rechts. Als je zoals Lucid-1 hebt, dan wordt anders geselecteeerd

#!/usr/bin/env python


import pygtk
import gtk
import gconf


class ChangeButtonOrder:
    '''De hoofdklasse van het programma (in dit geval is er maar 1)
    Deze word onderaan het script aangeroepen met:
    app = ChangeButtonOrder()
    '''
    def __init__(self):
        '''Deze functie wordt meteen opgeroepen, zodra de klasse aangemaakt wordt'''
        self.client = gconf.client_get_default ()
        self.key = "/apps/metacity/general/button_layout"

        # Maakt een hoofdvenster aan
        window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        # Sluit het programma als er op X wordt gedrukt
        window.connect("delete_event", self.close_app)
        # Zet de window titel
        window.set_title("Vensterknoppen instellen...")
        # Zet de afmetingen van het venster
        window.resize(400, 140)

        # Maakt een verticale layout, waarin verschillende items
        # onder elkaar gestapeld kunnen worden
        vbox = gtk.VBox()

        # Vraagt of de gebruiker de key mag wijzigen en maakt de label aan met de juiste tekst
        if self.client.key_is_writable(self.key):
            label = gtk.Label("Kies een positie:")
        else:
            label = gtk.Label("U heeft geen rechten om de positie te veranderen")
       
        # Zet het label bovenin het venster
        vbox.pack_start(label, False, False, 8)
       
        # Maakt een tabel met daarin de radio buttons en entry
        if self.client.key_is_writable(self.key):
            table = gtk.Table()
            self.left = gtk.RadioButton(None, "Links")
            self.left.connect('toggled', self.change_order)
            self.right = gtk.RadioButton(self.left, "Rechts")
            self.right.connect('toggled', self.change_order)
            self.custom = gtk.RadioButton(self.left, "Andere:")
            self.custom.connect('toggled', self.enable_custom)
            self.entry = gtk.Entry()
            # Vul de entry met de huidige waarde uit gconf
            self.entry.set_text(self.client.get_string(self.key))
            self.entry.set_sensitive(False)
            # Voegt een knop toe om de custom entry toe te passen
            self.buttonapply = gtk.Button(stock=gtk.STOCK_APPLY)
            self.buttonapply.set_sensitive(False)
            # Voert de functie "buttonapply_clicked" uit in deze(self) klasse (ChangeButtonOrder)
            self.buttonapply.connect('clicked', self.change_order)
           
            # Toggle de radio button naar de huidige status
            self.toggle_current()
           
            # Zet de posities in de tabel)
            table.attach(self.left, 0, 1, 0, 1, gtk.FILL, gtk.SHRINK)
            table.attach(self.right, 0, 1, 1, 2, gtk.FILL, gtk.SHRINK)
            table.attach(self.custom, 0, 1, 2, 3, gtk.FILL, gtk.SHRINK)
            table.attach(self.entry, 1, 2, 2, 3, xpadding=10)
            table.attach(self.buttonapply, 2, 3, 2, 3, gtk.FILL, gtk.SHRINK)
            # Zet de tabel als 2e item in de verticale layout
            vbox.pack_start(table, False, False)
           
        # Maakt een knoppenbox aan
        bbox = gtk.HButtonBox()
        bbox.set_layout(gtk.BUTTONBOX_END)
        buttonquit = gtk.Button(stock=gtk.STOCK_QUIT)
        # Voert de functie "close_app" uit in deze(self) klasse (ChangeButtonOrder)
        buttonquit.connect('clicked', self.close_app)
        # Zet de button in de buttonbox
        bbox.pack_start(buttonquit)
        # Zet de buttonbox als laatste in de verticale layout
        vbox.pack_start(bbox, False, False, 8)

        # Voeg de verticale layout toe aan het hoofdvenster
        window.add(vbox)
        # Laat alle knoppen etc zien (want die zijn standaard verborgen)
        window.show_all()

    def close_app(self, widget, event=None):
        '''Functie die het programma afsluit'''
        gtk.main_quit()
        return False

    def change_order(self, widget):
        '''Functie die de waarden in gconf veranderd'''
        if self.left.get_active(): # als "links" gekozen is
        s = "maximize,minimize,close:menu"
        elif self.right.get_active(): # als "rechts" gekozen is
        s = "menu:maximize,minimize,close"
        else:
        s = self.entry.get_text()
        # Zet de nieuwe waarde in gconf
        self.client.set_string(self.key, s)
        # Vul de entry met de nieuwe waarde
        self.entry.set_text(s)
       
    def enable_custom(self, widget):
        # Maakt de entry en apply button actief als "anders" is aangevinkt
        self.entry.set_sensitive(widget.get_active())
        self.buttonapply.set_sensitive(widget.get_active())
       
    def toggle_current(self):
        # Toggle de radio button naar de huidige status
        key = self.client.get_string(self.key)
        if key.find('maximize,minimize,close:') is not -1:
            self.left.set_active(True)
        elif key.find(':maximize,minimize,close') is not -1:
            self.right.set_active(True)
        else:
            self.custom.set_active(True)
           

# Geen idee wat het precies doet
# maar dit hoort gewoon zo in elke gtk app
def main():
    gtk.main()

# Voer alleen uit als dit het main script is
# dus niet als deze vanuit een ander script opgeroepen wordt
if __name__ == '__main__':
    # Defineer het programma
    app = ChangeButtonOrder()
    # Start het programma
    main()

EDIT: verhelsttje, misschien een leuke oefening om een soort van reset knop te maken, die de waarde terug zet naar de waarde waarmee het programma begonnen is.
« Laatst bewerkt op: 2010/03/24, 21:49:24 door Ronnie »
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Documentatie Terminal

Re: programma voor verplaatsen van buttens (links-rechts)
« Reactie #16 Gepost op: 2010/03/24, 22:01:36 »
Ziet er heel goed uit ronnie!

Het is inderdaad veel betere code dan in het origineel. Een klasse is misschien niet nodig, maar gebruik toch zeker functies die de code wat opsplits en leesbaarder maakt.
tja het origineel was een kopie aangezien ik er te weinig van ken maar wou toch de beginnende gebruiker helpen ,het is misschien de 5de keer dat ik iets probeer , toch bedankt voor de hulp
edit: vraagje hoe werkt de nummering binnen de tabel omdat ik graag 2 opties zou willen toevoegen (zoals links en rechts)
« Laatst bewerkt op: 2010/03/24, 22:20:05 door verhelsttje »

Offline chris.

  • Lid
    • http://www.linuxmintusers.be
Re: programma voor verplaatsen van buttens (links-rechts)
« Reactie #17 Gepost op: 2010/03/24, 22:04:30 »
nou petje af verhelsttje hoor,, ik doe het je niet na ;)

en dat is het mooie van open software, iemand bedenkt iets en een ander vult het aan, dat is de kracht ervan en iedereen heeft er profijt van :)

Re: programma voor verplaatsen van buttens (links-rechts)
« Reactie #18 Gepost op: 2010/03/24, 22:22:18 »
nou petje af verhelsttje hoor,, ik doe het je niet na ;)

en dat is het mooie van open software, iemand bedenkt iets en een ander vult het aan, dat is de kracht ervan en iedereen heeft er profijt van :)
ik leer zo sneller bij dan uren zitten te zoeken achter iets dat ik niet vind (omdat ik verkeert redeneer) en inderdaad dat is het mooie van open source

Offline Ronnie

  • Lid
    • ronnie.vd.c
Re: programma voor verplaatsen van buttens (links-rechts)
« Reactie #19 Gepost op: 2010/03/24, 22:30:38 »
Wat ik altijd gemist heb bij het open source gebeuren, is een leermeester. Er wordt vaak naar handleidingen verwezen, maar bij handleidingen krijg je geen feedback.

Als je code schrijft die werkt, maar verre van efficiënt of slecht te lezen/onderhouden, krijg je van die handleiding geen commentaar. Je ziet zelf dat het werkt en denkt dus dat je goede code schrijft. Zo zijn er enkele dingen die een "leermeester" veel beter kan dan een handleiding. Leermeesters, die zin/tijd hebben om dit allemaal uit te leggen zijn alleen heel schaars.
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Documentatie Terminal