Tôi đang mã hóa ứng dụng cần chọn một khu vực của màn hình. Tôi cần phải thay đổi con trỏ đến một hình chữ thập và sau đó vẽ một hình chữ nhật trên lựa chọn người dùng. Điều đầu tiên tôi tìm kiếm là làm thế nào để thao tác con trỏ và tôi gặp wxPython. Với wxPython tôi có thể dễ dàng thực hiện điều này trên Frame với một Panel, điều tôi cần là cửa sổ trong suốt để người dùng có thể nhìn thấy màn hình của mình trong khi đang chọn vùng mong muốn, nhưng nếu tôi tạo Frame và Panel đối tượng trong suốt mọi thứ bị lỗi.Vẽ Python trên màn hình
Vì vậy, tôi mở cho bất kỳ giải pháp nào, hoặc sử dụng wxPython hoặc không sử dụng nó bởi vì tôi thực sự không biết mình có sử dụng đúng hay không.
Tôi mới sử dụng Python và tôi không phải là người nói tiếng Anh bản địa, vì vậy tôi xin lỗi nếu bạn không thể hiểu điều gì đó.
Đây là những gì tôi mã
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()
Cảm ơn, đã khắc phục sự cố lỗi, nhưng bây giờ tôi có một vấn đề khác! Các hình chữ nhật lựa chọn được minh bạch quá, vì vậy tôi không thể có được cửa sổ hoàn toàn minh bạch và vẫn thấy sự lựa chọn. Nhưng điều này vẫn ổn. – Franco