Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 14.12.2020
Сообщений: 12

Панель дня передвижения окна при зажатии кнопки мыши в wxPython

05.01.2021, 18:38. Показов 1863. Ответов 6

Студворк — интернет-сервис помощи студентам
Я сделал окно безрамочным в wxPython, потому что хотел создать свою собственную рамку.
Но при использовании его кода окно движется медленее самого курсора мыши, и при выходе мыши из этой рамки окна (вообще за пределы окна приложения) связь с окном пропадает и окно перестает следовать за курсором мыши.
Я его немного переделал под себя, но он все равно сыроват и работает чутка не так как я хочу.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import wx
from threading import Thread
 
app = wx.App()
ok_no = wx.Frame(None, size=(400, 299), style=wx.DEFAULT_FRAME_STYLE & ~ (wx.RESIZE_BORDER | wx.CAPTION) | wx.STAY_ON_TOP)
ok_no.Show()
ok_no.go_st = "oshibka"
a = False
 
def LeftDown(event):
    global a
    a = True
    ok_no.go_st = event.GetPosition()
    pow()
    variable.start()
 
def LeftUp(event):
    global a
    a = False
    ok_no.go_st = "oshibka"
panelTitleBar = wx.Panel(ok_no, wx.ID_ANY, pos=(0, 0), size=(500, 20))
panelTitleBar.Bind(wx.EVT_LEFT_DOWN, LeftDown)
panelTitleBar.Bind(wx.EVT_LEFT_UP, LeftUp)
panelTitleBar.SetBackgroundColour("White")
panelTitleBar.Refresh()
 
 
def pow():
    global variable
    def pow_2():
        while a:
            if ok_no.go_st == "oshibka":
                pass
            else:
                x, y = wx.GetMousePosition()
                print(x, y)
                ok_no.Move(x - ok_no.go_st[0], y - ok_no.go_st[1])
    variable = Thread(target=pow_2)
 
app.MainLoop()
Тут такая же проблема с тем, что окно движется медленее курсора мыши и при отжатии кнопки мыши за пределами окна окно продолжает преследовать мышь.
Значит мне нужно либо ускорить движение окна за мышью, чтобы мышка не выходила за пределы окна, либо как-то обозначить пространство за пределами окна и добавить к нему Bind, либо найти функцию, которая определяет нажатие кнопки мыши, не привязывая событие к Bind.

Помогите, пожалуйста !
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.01.2021, 18:38
Ответы с готовыми решениями:

Некорректное выделение при зажатии Ctrl и левой кнопки мыши
Здравствуйте. После замены системы на Windows 10 установил MS 2003 (личные предпочтения). Однако всплыла дичь, которая просто вымораживает....

Кнопка с переменной которая меняется при зажатии левой кнопки мыши
Хай. Задача создать группу кнопок. При нажатии на левой кнопки миши ЛКМ происходит изменение значения показанного на кнопке, а точнее...

Реагирование на нажатие и отжатие кнопки мыши в wxPython
Можно ли как-то в wxPython обозначить область за пределами окна. К примеру за пределами wx.Frame или wx.App, что бы добавить к ним события...

6
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
06.01.2021, 10:15
Срочно учить классы.
0
0 / 0 / 0
Регистрация: 14.12.2020
Сообщений: 12
06.01.2021, 10:46  [ТС]
dondublon, Здравствуйте, объясните как это мне поможет ?
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
06.01.2021, 11:33
Magomed12, сделает ваш код аккуратным, простым для понимания и чтения.
ПММ, чем делать нестандартные контролы, надо разобраться с базой. Впрочем, поступайте, как знаете.
0
0 / 0 / 0
Регистрация: 14.12.2020
Сообщений: 12
06.01.2021, 13:29  [ТС]
dondublon, если честно я считаю, что в данном коде классы не очень нужны, аккуратнее обойтись функциями. Но можете ответить можно ли как-то обозначить пространство вне окна приложенич чтобы придать Bind или как написать реагирование на нажатие правой кнопки мыши вообще (не ципляясь за окно и виджиты). Может есть какая-то хитрость, я делал этот код по найденому в интернете примеру и видоизменил под себя, примеров я к сожалению больше не нашел для wxPython. Может вы предложите свой рабочий код этой рамки для окна ?
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
06.01.2021, 14:18
Magomed12, я сказал, вам надо срочно учиться работать с классами, никакой "аккуратности" функции с глобалками не дают, совсем наоборот. Потом уж можно и за гуй браться.
Вне окна приложения вы нажатие не перехватите (на уровне граф. фреймворка).
Скажу сразу, как сделать draggable область на wx я не знаю.
0
0 / 0 / 0
Регистрация: 14.12.2020
Сообщений: 12
07.01.2021, 13:22  [ТС]
Вот ответ на мой собственный вопрос. Короче вот полностью рабочая рамка для перетаскивания окна приложения (в коде нет кнопок для закрытия, свертывания и других кнопок, обычно находящихся в рамке, я думаю вы сами найдете и сделаете их)

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import wx
from threading import Thread
 
app = wx.App()
ok_no = wx.Frame(None, size=(400, 299), style=wx.DEFAULT_FRAME_STYLE & ~ (wx.RESIZE_BORDER | wx.CAPTION) | wx.STAY_ON_TOP)
ok_no.Show()
a = False
 
def LeftDown(event):
    global a, x_2, y_2
    a = True
    x_2, y_2 = event.GetPosition()
    pow()
    variable.start()
 
def LeftUp(event):
    global a
    a = False
 
def Mouse_stop(event):
    global a
    a = event.LeftIsDown()
 
panelTitleBar = wx.Panel(ok_no, wx.ID_ANY, pos=(0, 0), size=(500, 20))
panelTitleBar.Bind(wx.EVT_LEFT_DOWN, LeftDown)
panelTitleBar.Bind(wx.EVT_LEFT_UP, LeftUp)
app.Bind(wx.EVT_MOTION, Mouse_stop)
panelTitleBar.SetBackgroundColour("White")
panelTitleBar.Refresh()
 
def pow():
    global variable
    def pow_2():
        while a:
            x, y = wx.GetMousePosition()
            x_1 = x - 1
            y_1 = y - 1
            ok_no.Move(x_1 - x_2, y_1 - y_2)
    variable = Thread(target=pow_2)
 
app.MainLoop()
Если есть вопросы задавайте)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.01.2021, 13:22
Помогаю со студенческими работами здесь

Событие OnMouseMove одной кнопки, при зажатии другой кнопки
Есть две кнопки. Можно ли как-то сделать так, чтобы событие OnMouseMove одной кнопки работало только тогда, когда активно событие...

Рисовать при зажатии мыши
Подскажите, как рисовать до тех пор, пока зажата мышь? Делал MouseAdapter с такими переопределенными функциями: public void...

Не активируются окна при нажатии левой кнопки мыши
Проблема такая. при открытии 2-х окон невозможно неакитивное окно выделить курсором, только при нажатии на него правой кнопки или после...

Активация окна при нажатии левой кнопки мыши
Учу python по книге. Предоставили код для простой игры "Прыг-скок", где мяч отскакивает от платформы. В первом упражнении требуется...

При нажати левой кнопки мыши в месте нажатия отображается зеленый кружок, а при нажатии правой кнопки мыши красный квад
При нажати левой кнопки мыши в месте нажатия отображается зеленый кружок, а при нажатии правой кнопки мыши красный квадрат. При повторном...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru