[pygtk] gtk.combo problem

rhitam sanyal rhitam_sanyal at hotmail.com
Tue Oct 30 14:33:48 WST 2007


hi alain,
your solution is working perfectly fine , but another problem has come up.. 
i modified the code to test it on a list as follows:

#!/usr/bin/python
# Build the listStore
import gtk
window=gtk.Window(gtk.WINDOW_TOPLEVEL)
window.connect("destroy",gtk.main_quit)
box1=gtk.VBox(False,0)
window.add(box1)
wordlist=['aata','abbay','acute','adistance','bobbby','cat','cbount','daddy']
liststore = gtk.ListStore(str)
for value in wordlist:
        liststore.append([value])
# Build completion
completion = gtk.EntryCompletion()
completion.set_model(liststore)
completion.set_minimum_key_length(0)
completion.set_text_column(0)
completion.set_inline_completion(True)
# Built combobox
def entry_callback(widget,entry):
	entered_text=entry.get_active_text()
	print entered_text

entry = gtk.ComboBoxEntry(liststore, 0)
entry.get_child().set_completion(completion)
entry.get_child().set_max_length(10)
entry.connect("changed",entry_callback,entry)
box1.pack_start(entry,True,True,10)
window.show()
box1.show()

entry.show()
gtk.main()

now consider the function entry_callback. As per the character entered 
character , the active text gets modified . here i am just printing that to 
the console .. which hardly takes any time... but in the application i am 
designing, the entry_callback function deals with large amonts of data where 
the function is execute dependign upon the active text.
This is causing the program to hang since  it is trying to execute the entry 
based upon the constantly changing active_text. What i need is the variable 
to contain the text which is finally selected by the user ie the text 
selected after the enter key is pressed or say selected by a mouse click. I 
tried using get_popup_accessible for this purpose but i didtn really get how 
it works .

regards,
Rhitam





>From: alain walter <alain.walter at thalesgroup.com>
>To: rhitam sanyal <rhitam_sanyal at hotmail.com>
>CC: pygtk at daa.com.au
>Subject: Re: [pygtk] gtk.combo problem
>Date: Fri, 26 Oct 2007 14:35:38 +0200
>
>Something like that ?
>
>               # Build the listStore
>                liststore = gtk.ListStore(str)
>                for value in MyValues():
>                    liststore.append([value])
>                # Build completion
>                completion = gtk.EntryCompletion()
>                completion.set_model(liststore)
>                completion.set_minimum_key_length(0)
>                completion.set_text_column(0)
>                completion.set_inline_completion(True)
>                # Built combobox
>                entry = gtk.ComboBoxEntry(liststore, 0)
>                entry.get_child().set_completion(completion)
>                entry.get_child().set_max_length(itWidth)
>
>
>rhitam sanyal a écrit :
>
>>Hi all.. i am trying to create a combo with the pop down list being 
>>modfied in real time as i type each character :
>>[CODE=python]
>>import gtk
>>window=gtk.Window(gtk.WINDOW_TOPLEVEL)
>>window.connect("destroy",gtk.main_quit)
>>combo=gtk.Combo()
>>combo.set_use_arrows(True)
>>
>>wordlist=['aata','abbay','acute','adistance','bobbby','cat','cbount','daddy']
>>
>>def entry_callback(widget,combo):
>># ------
>>
>>combo.entry.connect("activate",entry_callback,combo)
>>window.add(combo)
>>window.show()
>>combo.show()
>>gtk.main()
>>[/CODE]
>>
>>now my aim is when i enter a chareacter 'a' into the combo.entry field .. 
>>all the words beginning with the letter 'a'  wud be set in the popdown 
>>list ... if the next character is 'c' , meaning now the entry is 'ac' then 
>>the pop down list should be modified to only the word 'acute' .. now the 
>>problem is the combo.entry.get_text() function will return a string only 
>>when the enter key is pressed .. how do i set the pop down list without 
>>pressing the enter key ?  :(    assuming i already haev a function which 
>>is  a python version of the C function getch() . returning the character 
>>which is pressed on the keyboard .. here is the fucntion:
>>
>>[CODE=python]
>>
>>def getch():
>>     import os, tty
>>
>>     fd = sys.stdin.fileno()
>>     tty_mode = tty.tcgetattr(fd)
>>     tty.setcbreak(fd)
>>     try:
>>             ch = os.read(fd, 1)
>>     finally:
>>             tty.tcsetattr(fd, tty.TCSAFLUSH, tty_mode)
>>
>>     return ch
>>[/CODE]
>>
>>but this wud catch a chaarcter entered in the console .. how do i do the 
>>same for the entry box of the combo.. any help appreciated.
>>regards,
>>Rhitam
>>
>>_________________________________________________________________
>>Express yourself instantly with MSN Messenger! Download today it's FREE! 
>>http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/
>>
>>_______________________________________________
>>pygtk mailing list   pygtk at daa.com.au
>>http://www.daa.com.au/mailman/listinfo/pygtk
>>Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/
>>
>
>
>--
>Alain Walter - THALES SERVICES
>01 69 88 78 73 at Eurocontrol
>01 41 48 00 04 at Thales
>


><< alain.walter.vcf >>

_________________________________________________________________
Express yourself instantly with MSN Messenger! Download today it's FREE! 
http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/



More information about the pygtk mailing list