2014-12-04 34 views
0

我想添加一个功能,我用wxpython做了一个计算器,我想那里有一个按钮,点击后改变背景颜色(面板)。为了向您展示我的代码,我制作了一个较小的程序,该程序只能改变颜色,即使在这一个中,我也会得到相同的结果: 背景颜色不会改变,点击按钮时不会发生任何反应,而且我也不会接收任何错误。实际上,计算器确实会改变颜色,但不是以我想要的方式改变颜色,它只改变文本的颜色(wx.StaticText),并不是真的要这样做。 总之,这里是代码:wxPython面板SetBackgroundColour按钮事件

import wx 

class calc(wx.Frame): 


    def __init__(self,parent,id): 
     wx.Frame.__init__(self,parent,id,"Calculator",size=(400,400)) 
     global panel 
     panel=wx.Panel(self) 
     a=wx.Button(panel,label="GO",pos=(100,100),size=(50,50)) 
     self.Bind(wx.EVT_BUTTON, self.change, a) 
    def change(self,event): 
     panel.SetBackgroundColour("red") 






if __name__=="__main__": 
    app=wx.App(False) 
    frame=calc(parent=None,id=-1) 
    frame.Show() 
    app.MainLoop() 

当我运行此,与按钮的边框显示,当我点击按钮,没有任何反应!有人知道这有什么问题吗? 感谢您的咨询!

+0

此代码适用于Xubuntu,wxPython 2.8.12和Python 2.7。你使用的是什么操作系统和wxPython/Python组合? – 2014-12-04 22:51:16

+0

使用SetOwnBackgroundColour仅更改面板的颜色而不更改它的子项。需要一个self.Refresh()后设置颜色为我在Windows 7 – Yoriz 2014-12-04 23:01:41

+0

我在Windows上使用python 2.7,我实际上还没有试过它在Ubuntu上,谢谢! – 2014-12-06 13:24:24

回答

0

当你的代码为我工作的是Xubuntu 14.04,wxPython的2.8.12和Python 2.7,我继续改写稍微去除全球和清理了一下:

import wx 

class calc(wx.Frame): 

    def __init__(self): 
     wx.Frame.__init__(self, None, title="Calculator", size=(400,400)) 
     self.panel = wx.Panel(self) 

     a = wx.Button(self.panel, label="GO", pos=(100,100), size=(50,50)) 
     self.Bind(wx.EVT_BUTTON, self.change, a) 

    def change(self,event): 
     self.panel.SetBackgroundColour("red") 
     self.Refresh() # for windows 

if __name__=="__main__": 
    app = wx.App(False) 
    frame = calc() 
    frame.Show() 
    app.MainLoop() 

这也适用为了我。

+0

在Windows 7上为我设置颜色后需要一个self.Refresh() – Yoriz 2014-12-04 22:57:01

+0

谢谢@Yoriz。我稍微更新了我的答案。 – 2014-12-05 13:53:38