hi all,
please help me with little problem [ the big one for me right now :(]
i write little app [ texteditor , who not :) ]
from textview i call window popup with help. [pressing 'a' in test
prog ] and i have 2 questions.
1.) how i disable automatic Tab inserted after pasting text from popup ?
use another key is solution but i want Tab as completer.
2.) it seems to same prob as in 1.) but how i disable moving cursor in
textbuffer when popup window is active and i changing rows in
treeview ? when i change type on WINDOW_TOPLEVEL my treeview has
focus and i cannot write into buffer.
sorry for my noob questions. here is example.
import gtk
class Completer(gtk.Window):
def __init__(self, parent, textview):
gtk.Window.__init__(self, gtk.WINDOW_POPUP)
self.set_size_request(200, 300)
self.set_transient_for(parent)
self.__sig1 = textview.connect('key-press-event', self.__keypress)
self.txtview = textview
self.store = gtk.ListStore(str)
self.view = gtk.TreeView(self.store)
self.view.set_headers_visible(False)
renderer = gtk.CellRendererText()
self.view.insert_column_with_attributes(-1, '', renderer, text=0)
scroll = gtk.ScrolledWindow()
scroll.set_policy(*(gtk.POLICY_AUTOMATIC,)*2)
scroll.add(self.view)
frame = gtk.Frame()
frame.set_shadow_type(gtk.SHADOW_ETCHED_IN)
frame.add(scroll)
self.add(frame)
for item in range(10):
self.store.append([str(item)])
self.text = [str(x) for x in range(10)]
def __keypress(self, widget, event):
if event.string == 'a':
self.__calc_coords()
self.show_all()
from gtk import keysyms as key
if event.keyval in (key.Right, key.Left, key.Home, key.End, key.Escape):
# jestlize bude stisknuta nejaka z techto klaves API okno se uzavre
self.hide()
return False
elif event.keyval == key.Tab:
# pastni do buferu hodnotu
self.txtview.get_buffer().insert_at_cursor(self.text[self.__get_selected()])
self.hide()
elif event.keyval == key.Up:
self.__select_previous()
elif event.keyval == key.Down:
self.__select_next()
else:
# pokud vracim False prog pokracuje dal,
# pokud True okno ma porad focus a nejde vkladat text
#self.txtview.set_accepts_tab(False)
return False
def __select_previous(self):
' predesla polozka v completemenu '
row = max(self.__get_selected() -1, 0)
selection = self.view.get_selection()
selection.unselect_all()
selection.select_path(row)
self.view.scroll_to_cell(row)
return False
def __get_selected(self):
' vraci aktualni polozku v treeview '
selection = self.view.get_selection()
try:
oops = selection.get_selected_rows()[1][0][0]
return oops
except IndexError:
return None
def __select_next(self):
' skok na dalsi polozku v completemenu '
row = min(self.__get_selected() + 1, len(self.store) - 1)
selection = self.view.get_selection()
selection.unselect_all()
selection.select_path(row)
self.view.scroll_to_cell(row)
return False
def __calc_coords(self):
' vypocte souradnice otevreni okna '
from gtk import TEXT_WINDOW_TEXT
# zjisti vysku a pozici kurzoru v bufferu
cursor =
self.txtview.get_buffer().get_iter_at_mark(self.txtview.get_buffer().get_insert())
rectangle = self.txtview.get_iter_location(cursor)
curx, cury = self.txtview.buffer_to_window_coords(TEXT_WINDOW_TEXT,
rectangle.x, rectangle.y)
curh = rectangle.height
# zjisti pozici a vysku textviewu
win = self.txtview.get_window(TEXT_WINDOW_TEXT)
rectangle = self.txtview.get_visible_rect()
winx, winy = win.get_origin()
winw, winh = rectangle.width, rectangle.height
# spocitej kde se muze otevrit okno s napovedou
posx, posy = winx + curx, winy + cury + curh
self.move(posx, posy)
class Pokus(gtk.Window):
def __init__(self):
gtk.Window.__init__(self)
self.connect('destroy', lambda x: gtk.main_quit())
self.set_size_request(500, 400)
view = gtk.TextView()
comp = Completer(self, view)
scroll = gtk.ScrolledWindow()
scroll.set_policy(*(gtk.POLICY_AUTOMATIC,)*2)
scroll.set_border_width(2)
scroll.add(view)
self.add(scroll)
self.show_all()
if __name__ == '__main__':
APP = Pokus()
gtk.main()
_______________________________________________
pygtk mailing list [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://faq.pygtk.org/