按钮事件的wxPython面板SetBackgroundColour

时间:2014-12-04 22:42:43

标签: python colors wxpython panel

我正在尝试将一个功能添加到我用wxpython制作的计算器中,我希望有一个按钮,单击时会更改背景颜色(面板)。为了向你展示我的代码,我制作了一个较小的程序,它应该只改变颜色,即使在这个程序中我得到了相同的结果: 背景颜色没有改变,当我点击按钮没有任何反应,我甚至没有收到任何错误。实际上,计算器确实改变颜色,但不是我想要它的方式,它只改变文本的颜色(一个wx.StaticText),并不是真的意味着这样做。 无论如何,这是代码:

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()

当我运行时,带有按钮的框架出现,当我点击按钮时,没有任何反应!有人知道这有什么问题吗? 谢谢你的建议!

1 个答案:

答案 0 :(得分: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()

这对我也有用。