Wie Funktioniert selektieren ?

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
Satzende
User
Beiträge: 70
Registriert: Samstag 8. Januar 2011, 12:41

Hallo,

mir fehlt eine Möglichkeit meine eigenen Objekte zu selektieren. Hab schon über ein Bild nachgedacht das über dem widget sitzt und das beim klicken dann gelb wird. Also so gelb/Transparent.
Noch eine Methode wäre eine Checkbox am Rand jedes Bildes. Wobei mir das nicht wirklich gefällt.
Gibt es in der GTK irgend eine forgevertigte methode oder hat jemand eine bessere idee ?

Bild
BlackJack

@Satzende: Das Bild und die Bildunterschrift scheinen ja in irgend einem anderen Widget zu stecken. Ich würde dessen Hintergrundfarbe ändern. Vielleicht mit ein bisschen "padding" arbeiten, damit auch ein Rahmen um das Bild herum entsteht. Welche Farbe im Farbschema des Benutzers für "selektiert" steht, wird sich sicher ermitteln lassen. Man könnte auch einfach Gelb nehmen, aber IMHO sollte man versuchen sich an das Farbschema zu halten, welches sich der Benutzer ausgesucht hat. Kann ja sein dass der auf Gelb steht und das als normale Fensterhintergrundfarbe gewählt hat. Dann sieht man eine gelbe Selektion natürlich nicht so gut. :-)
deets

Dummdidum Webview-herum.... *lalala*
Satzende
User
Beiträge: 70
Registriert: Samstag 8. Januar 2011, 12:41

Image und das Label ist in einer eigenen Klasse(gtk.Frame) eingebettet. Nun wollte ich einen Rand mit padding machen doch Frame hat diese Funktion nicht und kann sie auch nicht aufrufen.
Glaub das die Lösung einfach ist aber ich sehe es nicht :K
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

Hallo

Zeigt uns mal das Programm zu dem Bild, dann Spiele ich mal herum.

Gruß
Andyh
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys

if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
Satzende
User
Beiträge: 70
Registriert: Samstag 8. Januar 2011, 12:41

vielleicht zur Erklärung http://www.blendpolis.de/viewtopic.php?f=16&t=36085


Code: Alles auswählen

#-*- coding: UTF-8 -*-

import pygtk
pygtk.require('2.0')
import gtk

def lis_dir(liste = ["a","b","c"]):
    file = open("/home/mathias/Arbeitsfläche/DIR.html","w")
    temp = "test"
    for a in range(len(liste)):
        temp = str(liste[a])+"<br>"
        #print(temp+"|"+str(type(temp)))
        file.write(temp)
    file.close()



class imfra2T(gtk.Frame):

    def __init__(self,txt="Das Label hier",pfad = "/home/mathias/Bilder/logo2.jpg"):
        gtk.Frame.__init__(self)

        #self.vb      = gtk.VBox()
        self.tab     = gtk.Table(3,3)
        self.ima     = gtk.Image()
        self.labe    = gtk.Label(txt)
        self.add(self.tab)

        #scalieren
        self.pixbuf = gtk.gdk.pixbuf_new_from_file(pfad)
        self.scaled_buf = self.pixbuf.scale_simple(50,50,gtk.gdk.INTERP_BILINEAR)
        self.ima.set_from_pixbuf(self.scaled_buf)

        self.tab.attach(self.ima,1,2,0,1)
        self.tab.attach(self.labe,0,3,1,2)


    def cc(self):

        self.color = gtk.gdk.color_parser('#234fdb')
        self.modify_bg(gtk.STATE_NORMAL,self.color)




class dia_hinzu(gtk.Dialog):#Dialog Menu (Main-> Hinzufügen)

    def comcon(self,widget,data=None):
            pass

    def __init__(self):
        gtk.Dialog.__init__(self,"Hinzufügen", self,gtk.DIALOG_MODAL  | gtk.DIALOG_DESTROY_WITH_PARENT,(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OK, gtk.RESPONSE_OK))
        self.set_default_size(150,150)


        self.cfb  = gtk.FileChooserButton("Name")
        self.pfad = gtk.Entry()
        self.cb   = gtk.combo_box_new_text()
        self.ima  = gtk.Image()
        self.tab  = gtk.Table(3,3)
        self.ali  = gtk.Alignment(1,0,0,0)

        self.ima.set_from_file("/home/mathias/Bilder/logo2.jpg")

        self.tab.attach(self.ima,0,1,0,2,False,False)
        self.tab.attach(self.cb,1,2,0,1,False,False)
        self.tab.attach(self.pfad,1,2,1,2,False,False)
        self.tab.attach(self.cfb,2,3,1,2,False,False)
        self.tab.set_col_spacings(15)
        self.tab.set_border_width(10)


        self.cb.append_text("tester")
        self.cb.append_text("nummer2")
        self.cb.set_active(0)
        self.cb.connect('changed',self.comcon)
        #könte noch etwas aligmnt mit entry

        self.set_size_request(440,180)
        self.set_border_width(10)

        self.vbox.pack_start(self.tab)


        #self.dia.vbox.pack_start(gtk.Label('This is just a Test'))


    def rundialog(self):
        self.show_all()
        result = self.run()
        self.hide()
        return result


class menu(gtk.MenuBar):

    parrent = None

    def __init__(self,parr = None):

        if parr != None:
            parrent = parr

        gtk.MenuBar.__init__(self)
        self.menu = gtk.Menu()
        self.menui = gtk.MenuItem("Hinzufügen")
        self.menui.connect("activate",self.dia)
        self.menu.append(self.menui)
        self.menui = gtk.MenuItem("Bearbeiten")
        self.menu.append(self.menui)
        self.menui = gtk.MenuItem("Delete")
        self.menu.append(self.menui)
        self.menui = gtk.MenuItem("Exit")
        self.menui.connect("activate",lambda w: gtk.main_quit())
        self.menu.append(self.menui)
        self.mainMenu = gtk.MenuItem("Main")
        self.mainMenu.set_submenu(self.menu)

        self.append(self.mainMenu)
        self.set_size_request(50,40)


    def dia(self,data):
        #print(data)
        self.di = dia_hinzu()
        res = self.di.rundialog()
        print(res)



class myW(object):

    def __init__(self):
        self.window = gtk.Window()
        self.window.set_title("Der Titel")
        self.window.set_size_request(300,300)
        self.window.connect("delete_event", self.event_delete)
        self.window.connect("destroy", self.destroy)

        self.vb = gtk.VBox()
        self.menuBar = menu(self.window)
        self.menuBar.show_all()
        self.vb.pack_start(self.menuBar,False,False,0)

        self.lay = gtk.Layout(None,None)
        self.lay.set_size(600,600)
        self.hsb = self.lay.get_hadjustment()
        self.lay.show()
        self.vb.pack_start(self.lay,True,True,0)

        #IMage class
        self.inf = imfra2T()
        self.inf.show_all()
        self.lay.put(self.inf,20,20)

        #scrollbat
        self.hScrollbar = gtk.HScrollbar(None)
        self.hScrollbar.set_adjustment(self.hsb)
        self.hScrollbar.show()
        self.vb.pack_start(self.hScrollbar,False,False,0)

        self.vb.show()
        self.window.add(self.vb)
        self.window.show()

    def event_delete(self, widget, event, data=None):
        return False

    def destroy(self, data=None):
        gtk.main_quit()

    def main(self):
        gtk.main()


i = myW()
i.main()
Satzende
User
Beiträge: 70
Registriert: Samstag 8. Januar 2011, 12:41

@Andyh hast mich vergessen ?
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

Hallo

Nein habe dich nicht vergessen, nur sehr wenig Zeit.

Aber mal so neben bei, könntes du nicht einfach ein gtk.IconView nehmen?

Gruß
Andy
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys

if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
Satzende
User
Beiträge: 70
Registriert: Samstag 8. Januar 2011, 12:41

@Andyh

Sory das wollte nicht gequengelt. Wenn ein gkt.Frame auf das "Clicked " Signal reagieren würde wäre der Rest ein Kinderspiel.
Zum iconView , eigentlich perfekt nur ordnet der nur vertikal an und ich brauche eben beides.

Edit:
hier habe ich ein Beispiel gefunden welches zeigt das IconView doch geeignet ist. Nun hab ich alle GTK Selection Mode Constants aber mehr als ein Objekt kann ich nie selektieren

Edit:Edit: Hat sich erledigt . Man kann schon Mehr selektieren dann halt aber wie in einem Ordner Fenster. Hab immer eines nach dem anderen angeklickt, was nicht funktionieren kann. Srg gedrückt halten und schon geht alles .
Antworten