【发布时间】:2022-01-07 11:28:24
【问题描述】:
我正在编写一个应用程序,其中打算执行以下步骤: 1 - 用户点击蓝色区域(一个 wx.Panel)并出现一个白色圆圈; 2 - 用户点击选择开始按钮; 3 - 用户点击白色圆圈,它变为绿色(通过在白色圆圈上画一个绿色圆圈) 问题是当执行第 3 步时,单击鼠标的位置没有出现绿色圆圈。例如,单击蓝色区域会在 (223, 486) 处注册一个点。单击“选择开始”按钮,然后在白色圆圈中单击一个点,在 (211, 464) 处注册一个点,白色圆圈外出现一个绿色圆圈。我不明白为什么会发生这种情况,并希望在解决问题方面提供任何帮助。 在 MacOs 上使用 python 2.7 和 wxPython 3.0.3.0
import wx
class Test(wx.Frame):
def __init__(self, parent, title):
super(Test, self).__init__(parent, title = title, size = (820,900))
self.startSelected = False
self.radius = 10
self.panel = wx.Panel(self, size=(800,800))
self.panel.SetBackgroundColour(wx.Colour(0,0,200))
self.panel.Bind(wx.EVT_LEFT_DOWN, self.onMouseDown)
self.gbs = wx.GridBagSizer(0,0)
self.startBtn = wx.Button(self, wx.ID_ANY, label = 'Select Start')
self.startBtn.Bind(wx.EVT_BUTTON, self.selectStart)
self.gbs.Add(self.panel, span = (1,4), pos=(1,1),flag=wx.EXPAND | wx.ALL)
self.gbs.Add(self.startBtn, pos=(2,1))
self.SetSizer(self.gbs)
def onMouseDown(self, e):
pt = e.GetPosition()
print pt.x, pt.y
if e.LeftDown():
if self.startSelected:
color = wx.Colour(0,255,0)
self.paint(pt, color)
else:
color = wx.Colour(255,255,255)
self.paint(pt, color)
def paint(self, pt, color):
dc = wx.ClientDC(self)
b = wx.Brush(color)
dc.SetBrush(b)
dc.DrawCircle(pt.x, pt.y, self.radius)
def selectStart(self, e):
self.startSelected = True
if __name__ == '__main__':
app = wx.App()
Test(None, 'Test')
app.MainLoop()
【问题讨论】:
标签: python-2.7 wxpython mouseevent