我正在尝试将一个功能添加到我用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()
当我运行时,带有按钮的框架出现,当我点击按钮时,没有任何反应!有人知道这有什么问题吗? 谢谢你的建议!
答案 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()
这对我也有用。