화면 영역을 선택해야하는 응용 프로그램을 코딩하고 있습니다. 커서를 십자 기호로 변경 한 다음 사용자 선택 영역에 직사각형을 그려야합니다. 먼저 커서를 조작하는 방법을 찾고 wxPython을 발견했습니다. wxPython을 사용하면 Panel을 사용하여 프레임에서 쉽게이 작업을 수행 할 수 있습니다. 즉, 원하는 영역을 선택하는 동안 사용자가 자신의 화면을 볼 수 있도록 투명하게 창이 필요합니다. 그러나 프레임과 패널을 만들면 투명하게 된 모든 것은 버그가 있습니다.파이썬 그림 그리기
wxPython을 사용하든 사용하지 않든 모든 솔루션에 대해 열려 있습니다. 실제로 사용하고 있는지 잘 모르기 때문에 사용하지 마십시오.
저는 파이썬을 처음 사용하고 영어 원어민이 아니기 때문에, 이해할 수 없다면 유감입니다.
이 내가, 그 대부분 wxDC 페인트 명령에 사용되는 당신은 윈도우 생성에 wx.TRANSPARENT를 사용해서는 안
import wx
class SelectableFrame(wx.Frame):
c1 = None
c2 = None
def __init__(self, parent=None, id=-1, title=""):
wx.Frame.__init__(self, parent, id, title, size=wx.DisplaySize(), style=wx.TRANSPARENT_WINDOW)
self.panel = wx.Panel(self, size=self.GetSize(), style=wx.TRANSPARENT_WINDOW)
self.panel.Bind(wx.EVT_MOTION, self.OnMouseMove)
self.panel.Bind(wx.EVT_LEFT_DOWN, self.OnMouseDown)
self.panel.Bind(wx.EVT_LEFT_UP, self.OnMouseUp)
self.panel.Bind(wx.EVT_PAINT, self.OnPaint)
self.SetCursor(wx.StockCursor(wx.CURSOR_CROSS))
def OnMouseMove(self, event):
if event.Dragging() and event.LeftIsDown():
self.c2 = event.GetPosition()
self.Refresh()
def OnMouseDown(self, event):
self.c1 = event.GetPosition()
def OnMouseUp(self, event):
self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW))
def OnPaint(self, event):
if self.c1 is None or self.c2 is None: return
dc = wx.PaintDC(self.panel)
dc.SetPen(wx.Pen('red', 1))
dc.SetBrush(wx.Brush(wx.Color(0, 0, 0), wx.TRANSPARENT))
dc.DrawRectangle(self.c1.x, self.c1.y, self.c2.x - self.c1.x, self.c2.y - self.c1.y)
def PrintPosition(self, pos):
return str(pos.x) + " " + str(pos.y)
class MyApp(wx.App):
def OnInit(self):
frame = SelectableFrame()
frame.Show(True)
self.SetTopWindow(frame)
return True
app = MyApp(0)
app.MainLoop()
고마워, 버그가있는 문제가 해결되었지만 지금은 또 다른 문제가 있습니다! 선택 사각형도 투명 해져서 창을 완전히 투명하게 만들지 못하고 선택 영역을 볼 수 없습니다. 하지만 지금은 괜찮습니다. – Franco