2014-12-04 41 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