Я пытаюсь перестроить функциональность рабочего стола "выделить, чтобы выбрать", чтобы я мог использовать его в своем приложении. Когда я говорю "выделить для выбора", я имею в виду окно выбора, которое отображается, если вы нажмете и перетащите на свой рабочий стол (собственный для всех ОС основного потока).
Я работаю часами, пытаясь воссоздать его, и просто не могу найти способ. Я пробовал PyGTK, Xlib для python и пару других странных хаков. У всех из них есть свои проблемы, которые не позволят мне двигаться вперед.
Обычно я не прошу привести примерный пример кода, не предоставляя своего рода отправную точку, но в этом проекте я даже не знаю, с чего начать. Как бы вы это сделали?
Здесь требования:
Обновление: Забыл некоторые подробности.
Я не знаю, если это то, что вы ищете, но что, если вы создали другое окно в своем модуле, и покажите свой код, когда вы отпустите перетаскивание? Вы можете получить текущую позицию курсора и нарисовать там окно.
Это поможет вам получить положение мыши в корневом окне.
Таким образом, ваш код может выглядеть примерно так (это непроверенный код!). Я показываю только те части, которые входят в __ 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()
Очень упрощенный подход, но он должен дать вид того, что вы хотите.