Seçilen metni çekme

Başlatan Jey@Nfer, 24 Aralık 2012 - 16:23:58

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

Jey@Nfer

Mouse ile seçilen yazı metnini çeken bir kod istiyorum. Bir araştırma yaptım ve Gtk'nın kendi tutorialında bunun için bir metot olduğunu gördüm.

gtk.SelectionData.get_text

fakat bu yöntem bu şekliyle bana seçilen metni döndürmüyor.
Şöyle bir örnek var :

#!/usr/bin/env python

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

class GetSelectionExample:
    # Signal handler invoked when user clicks on the
    # "Get String Target" button
    def get_stringtarget(self, widget):
        # And request the "STRING" target for the primary selection
        ret = widget.selection_convert("PRIMARY", "STRING")
        return

    # Signal handler called when the selections owner returns the data
    def selection_received(self, widget, selection_data, data):

        # Make sure we got the data in the expected form
        if str(selection_data.type) == "STRING":
            # Print out the string we received
            print "STRING TARGET: %s" % selection_data.get_text()

        elif str(selection_data.type) == "ATOM":
            # Print out the target list we received
            targets = selection_data.get_targets()
            for target in targets:
                name = str(target)
                if name != None:
                    print "%s" % name
                else:
                    print "(bad target)"
        else:
            print "Selection was not returned as \"STRING\" or \"ATOM\"!"

        return False


    def __init__(self):
        # Create the toplevel window
        window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        window.set_title("Get Selection")
        window.set_border_width(10)
        window.connect("destroy", lambda w: gtk.main_quit())

        vbox = gtk.VBox(False, 0)
        window.add(vbox)
        vbox.show()

        # Create a button the user can click to get the string target
        button = gtk.Button("Get String Target")
        eventbox = gtk.EventBox()
        eventbox.add(button)
        button.connect_object("clicked", self.get_stringtarget, eventbox)
        eventbox.connect("selection_received", self.selection_received)
        vbox.pack_start(eventbox)
        eventbox.show()
        button.show()

        window.show()

def main():
    gtk.main()
    return 0

if __name__ == "__main__":
    GetSelectionExample()
    main()


Fakat benim istediğim tam olarak bu değil. Ben arada buton olmaksızın ; herhangi bir yere tıklamadan; doğrudan, programı çalıştırır çalıştırmaz otomatik olarak seçilen text metnini alıp bana göstermesini istiyorum. Oysa burada bir butona tıklama olayı var , ve ben şu kısmın tam olarak ne yaptığını anlamadım :

        button.connect_object("clicked", self.get_stringtarget, eventbox)
        eventbox.connect("selection_received", self.selection_received)


bundan dolayı da istediğim kodu bir türlü yazamıyorum. Örneklendirmek amacıyla şöyle bir kod yazdım :


#!/usr/bin/env python
#-*- coding:utf-8 -*-

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


class MyApp (object):
    def __init__(self):
        self.pencere=gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.pencere.connect("delete_event", gtk.main_quit )
        self.entry = gtk.Entry()

        try:
            self.s_text=gtk.SelectionData.get_text
            # burada seçtiğim texti alması gerekiyor
            # fakat bana aşağıdaki çıktıyı veriyor
            #<method 'get_text' of 'gtk.SelectionData' objects>
        except:
            self.s_text="burası seçilen yazı olmalı"

        self.entry.set_text("Seçilen yazı : %s"  % self.s_text )

        self.window.add(self.entry)
        self.window.show_all()
    def main(self):
        gtk.main()

app=MyApp()
app.main()


Bu programı çalıştırınca entry kısmında ; benim herhangi bir yerde seçtiğim yazının yazmasını istiyorum işte. Herhangi bir butona tıklamadan ; program çalışır çalışmaz doğrudan seçilen yazıyı göstermeli.
Fakat bana şunu gösteriyor : <method 'get_text' of 'gtk.SelectionData' objects>

Ayrıca şu şekilde kullanmayı da denedim : self.s_text=gtk.SelectionData.get_text()

Fakat bu sefer de şöyle bi hata veriyor :
self.s_text=gtk.SelectionData.get_text()
TypeError: descriptor 'get_text' of 'gtk.SelectionData' object needs an argument


Bunu nasıl yapabilirim acaba?
Şimdiden teşekkürler !
Hırs , azim , tevekkül ...

www.mehmetvahit.net

hitokiri

#!/usr/bin/env python
#-*- coding:utf-8 -*-

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


class MyApp (object):
    def __init__(self):
        self.pencere=gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.pencere.connect("delete_event", gtk.main_quit )


        self.eventbox = gtk.EventBox()
        self.eventbox.connect("selection_received", self.selection_received)
        self.eventbox.show()
       
        self.entry = gtk.Entry()
        self.eventbox.add(self.entry)
       


        self.pencere.add(self.eventbox)
        self.pencere.show_all()

    def selection_received(self, widget, selection_data, data):

        # Make sure we got the data in the expected form
        if str(selection_data.type) == "STRING":
            # Print out the string we received
            text =  "STRING TARGET: %s" % selection_data.get_text()
            self.entry.set_text(text)

        elif str(selection_data.type) == "ATOM":
            # Print out the target list we received
            targets = selection_data.get_targets()
            for target in targets:
                name = str(target)
                if name != None:
                    print "%s" % name
                else:
                    print "(bad target)"
        else:
            print "Selection was not returned as \"STRING\" or \"ATOM\"!"

        return False       
    def main(self):
        gtk.main()

app=MyApp()
app.eventbox.selection_convert("PRIMARY", "STRING")
app.main()


tıklamada eventboxtan yapılan işlemi eklemeyi atlamışsın o kadar XD

Jey@Nfer

@hitokiri teşekkürler ;)
gtk yeni başladım istihzadaki kitapta yoktu bu eventbox , kafam karışmış harbi iyice , oysa basit bi şeymiş vay be .
neyse bu çok işime yarıycak; tekrardan teşekkürler ;)
Hırs , azim , tevekkül ...

www.mehmetvahit.net

cagriemer

Cozulen sorunlar icin cozuldukonusu

hitokiri

Delinin biri metin seçmeyi engellemiş ve teliflik bir durumda yok. Çeviri bile değil, sinir oldum. Yeniden düzenledim, belki birinin işine yarayabilir, metni seçip yeniden çalıştıra basmak yeterli. Hala var bu fikri hür olmayanlardan şaşırdım açıkçası. :O
#!/usr/bin/env python
#-*- coding:utf-8 -*-

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


class MyApp (object):
    def __init__(self):
        self.pencere=gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.pencere.connect("delete_event", gtk.main_quit )


        self.eventbox = gtk.EventBox()
        self.eventbox.connect("selection_received", self.selection_received)
        self.eventbox.show()
       
        hbox = gtk.VBox()

        sw = gtk.ScrolledWindow()
        sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        textview = gtk.TextView()
        self.textbuffer = textview.get_buffer()
        sw.add(textview)

       
        self.button = gtk.Button("Yeniden Çalıştır.")
        self.eventbox.add(sw)
        self.button.connect("clicked", self.run)

        hbox.pack_start(self.eventbox, True, True, 5)
        hbox.pack_end(self.button, False,False, 7)

        self.pencere.add(hbox)
        self.pencere.show_all()
    def run(self, data):
        self.eventbox.selection_convert("PRIMARY", "STRING")
    def selection_received(self, widget, selection_data, data):

        # Make sure we got the data in the expected form
        if str(selection_data.type) == "STRING":
            # Print out the string we received
            text =  "STRING TARGET: %s" % selection_data.get_text()
            print (text)
            self.textbuffer.set_text(text)

        elif str(selection_data.type) == "ATOM":
            # Print out the target list we received
            targets = selection_data.get_targets()
            for target in targets:
                name = str(target)
                if name != None:
                    print "%s" % name
                else:
                    print "(bad target)"
        else:
            print "Selection was not returned as \"STRING\" or \"ATOM\"!"

        return False       
    def main(self):
        gtk.main()

app=MyApp()
app.eventbox.selection_convert("PRIMARY", "STRING")
app.main()