Tôi muốn tạo một cửa sổ hình đơn giản trong wxPython. Nhiều hơn hoặc ít hơn tôi muốn làm các wx tương đương với Tkinter của self.overrideredirect (1) (Nó được thoát khỏi hệ điều hành mặc định), sau đó làm tròn các góc trên cửa sổ.Cách đơn giản nhất để tạo cửa sổ hình trong wxPython là gì?
Trả lời
Có một bản trình bày khung hình trong các bản trình diễn wxPython. Tôi xin lỗi vì nguồn gián tiếp. Họ ban đầu được đưa ra khi một trình cài đặt windows here:
Bạn sẽ muốn nhìn vào shaped_frame_mobile.py hoặc shaped_frame.py, mà cả hai cuộc gọi images.py từ danh sách đó cho bitmap cửa sổ mẫu. Nó không phải là chính xác tương đương với overrideredirect
vì bạn sẽ phải cung cấp một hình ảnh được vẽ cho khung, nhưng nó vẫn có thể giúp bạn thực hiện một cái gì đó tương tự.
Các bộ phận quan trọng là những chức năng mà thiết lập các hình dạng cửa sổ dựa trên bitmap và xử lý các sự kiện wx.EVT_PAINT:
def SetWindowShape(self, evt=None):
r = wx.RegionFromBitmap(self.bmp)
self.hasShape = self.SetShape(r)
def OnPaint(self, evt):
dc = wx.PaintDC(self)
dc.DrawBitmap(self.bmp, 0,0, True)
Edit - Dưới đây là một thay đổi shaped_frame_mobile.py
đó tải các hình ảnh .png quy định tại các IMAGE_PATH biến. Thay đổi điều đó để trỏ tới hình ảnh của bạn:
import wx
# Create a .png image with something drawn on a white background
# and put the path to it here.
IMAGE_PATH = '/python26/projects/shapedwin/image.png'
class ShapedFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, "Shaped Window",
style = wx.FRAME_SHAPED | wx.SIMPLE_BORDER)
self.hasShape = False
self.delta = wx.Point(0,0)
# Load the image
image = wx.Image(IMAGE_PATH, wx.BITMAP_TYPE_PNG)
image.SetMaskColour(255,255,255)
image.SetMask(True)
self.bmp = wx.BitmapFromImage(image)
self.SetClientSize((self.bmp.GetWidth(), self.bmp.GetHeight()))
dc = wx.ClientDC(self)
dc.DrawBitmap(self.bmp, 0,0, True)
self.SetWindowShape()
self.Bind(wx.EVT_LEFT_DCLICK, self.OnDoubleClick)
self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
self.Bind(wx.EVT_MOTION, self.OnMouseMove)
self.Bind(wx.EVT_RIGHT_UP, self.OnExit)
self.Bind(wx.EVT_PAINT, self.OnPaint)
self.Bind(wx.EVT_WINDOW_CREATE, self.SetWindowShape)
def SetWindowShape(self, evt=None):
r = wx.RegionFromBitmap(self.bmp)
self.hasShape = self.SetShape(r)
def OnDoubleClick(self, evt):
if self.hasShape:
self.SetShape(wx.Region())
self.hasShape = False
else:
self.SetWindowShape()
def OnPaint(self, evt):
dc = wx.PaintDC(self)
dc.DrawBitmap(self.bmp, 0,0, True)
def OnExit(self, evt):
self.Close()
def OnLeftDown(self, evt):
self.CaptureMouse()
pos = self.ClientToScreen(evt.GetPosition())
origin = self.GetPosition()
self.delta = wx.Point(pos.x - origin.x, pos.y - origin.y)
def OnMouseMove(self, evt):
if evt.Dragging() and evt.LeftIsDown():
pos = self.ClientToScreen(evt.GetPosition())
newPos = (pos.x - self.delta.x, pos.y - self.delta.y)
self.Move(newPos)
def OnLeftUp(self, evt):
if self.HasCapture():
self.ReleaseMouse()
if __name__ == '__main__':
app = wx.PySimpleApp()
ShapedFrame().Show()
app.MainLoop()
- 1. Hiển thị hình ảnh .png trong cửa sổ trong wxPython
- 2. Ẩn một cửa sổ lô đơn giản
- 3. Cách đơn giản nhất để SSH bằng Python là gì?
- 4. Cách đơn giản nhất để giảm ngày trong Javascript là 1 ngày là gì?
- 5. Cửa sổ Android là gì?
- 6. Cách xây dựng hiển thị hình ảnh wxWidgets đơn giản
- 7. Khung công tác WSGI đơn giản/nhẹ nhất là gì?
- 8. Cách đơn giản nhất để tạo Google Map mashup?
- 9. Cách đơn giản nhất để làm cho Hình ảnh có thể chạm được trong libgdx là gì?
- 10. Cách tốt nhất để sử dụng các tiện ích linux dưới cửa sổ là gì?
- 11. Cách tốt nhất để viết về cách viết một bộ x86 đơn giản là gì?
- 12. Làm cách nào để bố trí cửa sổ 3 ngăn bằng wxPython?
- 13. Cách đơn giản nhất để xác định biến cục bộ trong Oracle là gì?
- 14. Cách đơn giản nhất để sao chép một tập lệnh python trong Linux là gì?
- 15. Cách đơn giản nhất để song song một tác vụ trong java là gì?
- 16. Cách đơn giản nhất để phân tích cú pháp JSON trong Scala là gì?
- 17. Toàn màn hình Python TKinter hoặc cửa sổ wxPython, nhưng 'ở phía dưới cùng' của tất cả các cửa sổ?
- 18. Cách đơn giản nhất để gọi url POST POST bằng Delphi là gì?
- 19. Cách đơn giản nhất để viết thông điệp đầu ra đến 'cửa sổ đầu ra' trong Visual Studio 2010?
- 20. Cách đơn giản nhất để có tệp cấu hình trong Windows Forms C# Application
- 21. Cách đơn giản nhất để thêm ảnh tiểu sử bằng Đá quý Omniauth-Facebook là gì?
- 22. Phương pháp * chính xác * đơn giản nhất để phát hiện hình chữ nhật trong một hình ảnh là gì?
- 23. "lambda" có nghĩa là gì trong Python, và cách đơn giản nhất để sử dụng nó là gì?
- 24. trong Qt, Làm cách nào để đặt cửa sổ là cửa sổ hiện tại?
- 25. Thuật toán đơn giản nhất để thoát khỏi một ký tự đơn lẻ là gì?
- 26. Tạo một Bảng đơn giản trong WPF?
- 27. VBScript: Cách đơn giản nhất để định dạng chuỗi là gì?
- 28. Cách đơn giản nhất để sao chép đối tượng ArrayBuffer là gì?
- 29. Cách đơn giản nhất để tạo một số cơ sở dữ liệu máy chủ HSQLDB là gì?
- 30. Cách tốt nhất để tự động triển khai cửa sổ Azure là gì?
Cảm ơn, mặc dù nó tham chiếu đến mô-đun "hình ảnh". Tôi không chắc chính xác mô-đun nào. Bạn có chút manh mối nào không? – rectangletangle
Đó là tệp 'images.py' từ liên kết nguồn ở trên. Bạn có thể thả nó vào cùng thư mục với các thư mục khác, hoặc loại bỏ 'import images' và nạp bitmap của riêng bạn thay cho dòng' images.getVippiBitmap() '. Tôi không biết tại sao bản demo sử dụng một mô-đun python để cung cấp một hình ảnh. –
@ Anteater7171 Đã thêm mã được thay đổi vào câu trả lời của tôi. Hiển thị dễ hơn là giải thích. –