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

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

1 голос
/ 08 сентября 2011

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

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

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

Вот требования:

  • Должен рисовать в корневом окне (или прозрачном слое, который "кажется" корневым)
  • Должен возвращать координаты выделения (x, y, высота по ширине)

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

  • Я использую Ubuntu 10.10
  • У меня есть два монитора (хотя, я не думаю, что это должно иметь значение)
  • Я не против загрузить дополнительные библиотеки, которые необходимы

1 Ответ

0 голосов
/ 12 сентября 2011

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

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

Итак, ваш код может выглядеть примерно так (это непроверенный код!) Я показываю только соответствующие части того, что происходит внутри __ 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's main window automatically.
    win.show()

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

...