在我的wxPython GUI中,我試圖將用戶引導至特定的窗口小部件。wxPython繪畫事件適用於Mac OSX,但不適用於Windows
在我的簡化代碼中,期望的行爲是這樣的:點擊按鈕2,一旦繪製事件被觸發,就會在按鈕1周圍繪製一條紅線。此行爲在OSX上按預期工作,但該行不顯示在Windows上。這裏有一些簡化的代碼:
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, name='Name')
self.InitUI()
def InitUI(self):
self.panel = wx.Panel(self, name='main_panel')
self.btn1 = wx.Button(self.panel, -1, 'button 1')
self.btn2 = wx.Button(self.panel, -1, 'button 2')
self.Bind(wx.EVT_BUTTON, self.do_button, self.btn2)
sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(self.btn1, flag=wx.ALL, border=10)
sizer.Add(self.btn2, flag=wx.ALL, border=10)
self.panel.SetSizer(sizer)
def do_button(self, event):
self.Bind(wx.EVT_PAINT, self.highlight_button)
def highlight_button(self, event):
"""
Draw a red highlight line around button 1
"""
wind = self.btn1
pos = wind.GetPosition()
size = wind.GetSize()
dc = wx.PaintDC(self)
dc.SetPen(wx.Pen('red', 5, wx.SOLID))
dc.DrawRectangle(pos[0], pos[1], size[0], size[1])
self.Refresh()
event.Skip()
app = wx.App()
app.frame = MyFrame()
app.frame.Centre()
app.frame.Show()
app.MainLoop()
我成功地捕獲了Windows上的繪圖事件,但紅線從不出現。我正在使用Windows 10,wxPython 3.0.2。
謝謝您的回答!看起來,另外,我需要改變這一行:'dc = wx.PaintDC(self)'到'dc = wx.PaintDC(self.panel)'。 –