Панель дня передвижения окна при зажатии кнопки мыши в wxPython
Я сделал окно безрамочным в wxPython, потому что хотел создать свою собственную рамку. Взял код с сайта: https://fooobar.com/questions/15910813/wxpython-change-the-headers-color Но при использовании его кода окно движется медленее самого курсора мыши, и при выходе мыши из этой рамки окна (вообще за пределы окна приложения) связь с окном пропадает и окно перестает следовать за курсором мыши. Я его немного переделал под себя, но он все равно сыроват и работает чутка не так как я хочу.
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.
Помогите, пожалуйста !
Ответы (1 шт):
Дабы ни один человек не попал в такую нудную и обидную ситуацию (всем пофиг на твой вопрос), вот ответ на мой собственный вопрос. Короче вот полностью рабочая рамка для перетаскивания окна приложения (в коде нет кнопок для закрытия, свертывания и других кнопок, обычно находящихся в рамке, я думаю вы сами найдете и сделаете их)
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()
Если есть вопросы задавайте)