用wxPython写一个带有右侧滚动条的bmp图片展示窗,点击图片返回鼠标点击坐标的demo
时间: 2023-05-28 19:02:00 浏览: 191
滚动效果的图片demo
下面是一个简单的示例代码,实现了一个带有右侧滚动条的bmp图片展示窗,并在点击图片时返回鼠标点击坐标的功能:
```python
import wx
class ImagePanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.SetBackgroundStyle(wx.BG_STYLE_PAINT)
self.Bind(wx.EVT_PAINT, self.OnPaint)
self.Bind(wx.EVT_LEFT_DOWN, self.OnMouseClick)
self.bmp = wx.Bitmap("image.bmp")
def OnPaint(self, event):
dc = wx.PaintDC(self)
dc.Clear()
dc.DrawBitmap(self.bmp, 0, 0)
def OnMouseClick(self, event):
pos = event.GetPosition()
print("Mouse clicked at: (%d, %d)" % (pos.x, pos.y))
class ImageFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="Image Viewer")
panel = wx.Panel(self)
sizer = wx.BoxSizer(wx.HORIZONTAL)
image_panel = ImagePanel(panel)
sizer.Add(image_panel, 1, wx.EXPAND | wx.ALL, 5)
scroll_panel = wx.Panel(panel)
scroll_sizer = wx.BoxSizer(wx.VERTICAL)
scrollbar = wx.ScrollBar(scroll_panel, style=wx.SB_VERTICAL)
scrollbar.SetScrollbar(0, 20, 1000, 20)
scrollbar.Bind(wx.EVT_SCROLL, self.OnScroll)
scroll_sizer.Add(scrollbar, 1, wx.EXPAND | wx.ALL, 5)
scroll_panel.SetSizer(scroll_sizer)
sizer.Add(scroll_panel, 0, wx.EXPAND | wx.ALL, 5)
panel.SetSizer(sizer)
def OnScroll(self, event):
print("Scroll position: %d" % event.GetPosition())
if __name__ == "__main__":
app = wx.App()
frame = ImageFrame()
frame.Show()
app.MainLoop()
```
该示例中创建了一个继承自`wx.Panel`的`ImagePanel`类,用于展示图片并处理鼠标点击事件。在`OnPaint`方法中,使用`wx.PaintDC`绘制了`self.bmp`图片。在`OnMouseClick`方法中,获取鼠标点击坐标并打印到控制台上。
另外,创建了一个继承自`wx.Frame`的`ImageFrame`类作为主窗口,它包括一个`ImagePanel`对象和一个包含垂直滚动条的`wx.Panel`对象。在`OnScroll`方法中,获取滚动条位置,并打印到控制台上。
这个示例是一个基本的框架,需要根据具体需求加以扩展。
阅读全文