Могу ли я сделать так, чтобы пользовательская подсказка pygtk оставалась включенной, когда курсор находится над ней? - PullRequest
0 голосов
/ 02 октября 2011

Пожалуйста, посмотрите на следующий фрагмент:

    import gtk

    def callback(widget, x, y, keyboard_mode, tooltip):
        hbox = gtk.HBox(False, 8)
        button = gtk.Button('Exit Tooltip')
        label = gtk.Label('Tooltip text')
        hbox.pack_start(label)
        hbox.pack_start(button)
        hbox.show_all()
        tooltip.set_custom(hbox)
        return True

    label = gtk.Label('Test label')
    label.set_has_tooltip(True)
    label.connect('query-tooltip', callback)

Здесь я создал пользовательскую подсказку с кнопка закрытия в нем.Теперь я хочу, чтобы он оставался , пока я не нажму кнопку закрытия .Поиск google оказался не таким уж полезным.кроме того, я также хотел бы знать сигналы / события , которые генерируются при закрытии всплывающей подсказки.

Подобные проблемы обрабатываются плавно для JQuery / JavaScript / Ajax всплывающие подсказки и т. Д., Но для gtk / pygtk нет удачи: (

Заранее спасибо ...

1 Ответ

0 голосов
/ 22 ноября 2011

У меня тоже была эта проблема, и, насколько я знаю, нет никакого способа определить, как долго всплывающая подсказка остается.

Что я сделал (и рекомендую вам), так это то, что высоздайте свою собственную «всплывающую подсказку» и установите ее цвет фона на желтый или любой другой цвет, который вы хотите, с помощью окна событий.Убедитесь, что вы еще не показали это.Это просто упрощенный код, так как вам нужно будет самостоятельно позиционировать и изменять его размер в своем проекте.

color = gtk.gdk.rgb_get_colormap().alloc_color('black')
ebTooltip = gtk.EventBox()
btnTooltip = gtk.Button("Close")
ebTooltip.add(btnTooltip)
ebTooltip.modify_bg(gtk.STATE_NORMAL, color)

Теперь вам просто нужно скрыть и показать этот блок событий с помощью ваших обратных вызовов.Чтобы показать это, позвоните ...

ebTooltip.show()

И, чтобы скрыть это (вероятно, по событию "clicked" вашей кнопки закрытия) ...

ebTooltip.hide()

Надеюсь, что решитВаша проблема!

...