Выделите поле выбора в Python

1

Я пытаюсь перестроить функциональность рабочего стола "выделить, чтобы выбрать", чтобы я мог использовать его в своем приложении. Когда я говорю "выделить для выбора", я имею в виду окно выбора, которое отображается, если вы нажмете и перетащите на свой рабочий стол (собственный для всех ОС основного потока).

Я работаю часами, пытаясь воссоздать его, и просто не могу найти способ. Я пробовал PyGTK, Xlib для python и пару других странных хаков. У всех из них есть свои проблемы, которые не позволят мне двигаться вперед.

Обычно я не прошу привести примерный пример кода, не предоставляя своего рода отправную точку, но в этом проекте я даже не знаю, с чего начать. Как бы вы это сделали?

Здесь требования:

  • Необходимо нарисовать на корневом окне (или прозрачный слой, который "появляется" как корень)
  • Необходимо вернуть координаты выбора (x, y, height width)

Обновление: Забыл некоторые подробности.

  • Я использую Ubuntu 10.10
  • У меня есть два монитора (хотя, я думаю, это не имеет значения)
  • Я не против загрузки каких-либо дополнительных библиотек, которые необходимы
  • 0
    Можете ли вы обрабатывать обработчики onclick / release с помощью pygtk? Можете ли вы нарисовать окно на экране? Если так, что еще вам нужно?
  • 0
    Самая сложная часть проблемы - нарисовать прямоугольник в корневом окне, а не в дочернем окне / виджете. Я ничего не нарисовал в корневом окне, используя pygtk.
Теги:
selection
pygtk
xlib

1 ответ

0

Я не знаю, если это то, что вы ищете, но что, если вы создали другое окно в своем модуле, и покажите свой код, когда вы отпустите перетаскивание? Вы можете получить текущую позицию курсора и нарисовать там окно.

Это поможет вам получить положение мыши в корневом окне.

Таким образом, ваш код может выглядеть примерно так (это непроверенный код!). Я показываю только те части, которые входят в __ init __.

def __init__(self):

    ...
    #Some of your code here.
    ...

    win = gtk.Window(gtk.WINDOW_TOPLEVEL)

    #Note that I am creating a popup window separately.
    popwin = gtk.Window(gtk.WINDOW_POPUP)

    #I am setting "decorated" to False, so it will have no titlebar or window controls.
    #Be sure to compensate for this by having another means of closing it.
    popwin.set_decorated(False)

    def ShowPopup():
        #You may need to put additional arguments in above if this is to be an event. 
        #For sake of example, I'm leaving this open ended.

        #Get the cursor position.            
        rootwin = widget.get_screen().get_root_window()
        curx, cury, mods = rootwin.get_pointer()

        #Set the popup window position.
        popwin.move(curx, cury)
        popwin.show()

    def HidePopup():
        #This is just an example for how to hide the popup when you're done with it.
        popwin.hide()

    ...
    #More of your code here.
    ...

    #Of course, here is the code showing your program main window automatically.
    win.show()

Очень упрощенный подход, но он должен дать вид того, что вы хотите.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню