如何解决在事件触发器上更新 wxpython 中的静态标签
我正在构建一个应用程序,该应用程序将显示有关摩托车的基本信息,例如 RPM 及其所在的档位。假设我们通过“按下键盘按钮”更改档位,我怎样才能让它更新标签。假设等效键是向上键,到目前为止,这是我想出的,但是在触发事件时标签不会更新。我可能做错了什么?
import wx
import sys
var =int(sys.argv[1])
gr = "N"
class MyFrame(wx.Frame):
def __init__(self,*args,**kwds):
kwds["style"] = kwds.get("style",0) | wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self,**kwds)
self.SetSize((400,300))
self.gauge_1 = wx.Gauge(self,wx.ID_ANY,10000,style=wx.GA_HORIZONTAL | wx.GA_SMOOTH)
self.Bind(wx.EVT_KEY_UP,self.OnKeyUp)
self.__set_properties()
self.__do_layout()
def __set_properties(self):
self.SetTitle("Test")
self.gauge_1.SetBackgroundColour(wx.Colour(216,216,191))
self.gauge_1.SetForegroundColour(wx.Colour(128,206))
self.gauge_1.SetFont(wx.Font(11,wx.FONTFAMILY_DEFAULT,wx.FONTSTYLE_norMAL,wx.FONTWEIGHT_norMAL,"Ubuntu"))
self.gauge_1.SetValue(var)
def __do_layout(self):
sizer_1 = wx.BoxSizer(wx.VERTICAL)
sizer_1.Add(self.gauge_1,wx.EXPAND,0)
label_1 = wx.StaticText(self,"GEAR")
label_1.SetMinSize((100,50))
label_1.SetForegroundColour(wx.Colour(0,137,215))
label_1.SetFont(wx.Font(25,wx.FONTFAMILY_MODERN,wx.FONTSTYLE_ITALIC,""))
sizer_1.Add(label_1,wx.ALL,3)
Gearind = wx.StaticText(self,gr,style=wx.ALIGN_CENTER)
Gearind.SetMinSize((50,43))
Gearind.SetForegroundColour(wx.Colour(122,7))
Gearind.SetFont(wx.Font(32,wx.FONTSTYLE_SLANT,""))
sizer_1.Add(Gearind,0)
self.SetSizer(sizer_1)
self.Layout()
def OnKeyUp(self,evt):
code = evt.GetKeyCode()
if code == wx.WXK_UP:
gr = "1"
self.Gearind.SetLabel(gr)
elif code == wx.WXK_DOWN:
evt.Skip()
class MyApp(wx.App):
def OnInit(self):
self.Test = MyFrame(None,"")
self.SetTopWindow(self.Test)
self.Test.Show()
return True
if __name__ == "__main__":
app = MyApp(0)
app.MainLoop()
解决方法
我不相信 Frame
接受字符。
使用带有样式 wx.Window
或 wx.WANTS_CHARS
wx.Panel
您想更新 self.Gearind
无济于事,但您将其定义为 local
,即 Gearind
。
在下面,我添加了一个面板和其他一些调整(注意仪表值)。
您可能想要调查 wxpython SpeedMeter
,它可能会向您的程序添加一些 Vroooom!
。
import wx
import sys
try:
var =int(sys.argv[1])
except Exception:
var = 0
gr = "N"
class MyFrame(wx.Frame):
def __init__(self,parent):
wx.Frame.__init__(self,parent,wx.ID_ANY)
self.SetSize((400,300))
self.panel = wx.Panel(self,wx.ID_ANY)
self.gauge_1 = wx.Gauge(self.panel,wx.ID_ANY,6,style=wx.GA_HORIZONTAL | wx.GA_SMOOTH)
self.panel.Bind(wx.EVT_KEY_UP,self.OnKeyUp)
self.__set_properties()
self.__do_layout()
def __set_properties(self):
self.SetTitle("Test")
#self.gauge_1.SetBackgroundColour(wx.Colour(216,216,191))
#self.gauge_1.SetForegroundColour(wx.Colour(128,206))
#self.gauge_1.SetFont(wx.Font(11,wx.FONTFAMILY_DEFAULT,wx.FONTSTYLE_NORMAL,wx.FONTWEIGHT_NORMAL,"Ubuntu"))
self.gauge_1.SetValue(var)
def __do_layout(self):
sizer_1 = wx.BoxSizer(wx.VERTICAL)
sizer_1.Add(self.gauge_1,wx.EXPAND,0)
label_1 = wx.StaticText(self.panel,"GEAR")
label_1.SetMinSize((100,50))
label_1.SetForegroundColour(wx.Colour(0,137,215))
label_1.SetFont(wx.Font(25,wx.FONTFAMILY_MODERN,wx.FONTSTYLE_ITALIC,""))
sizer_1.Add(label_1,wx.ALL,3)
self.Gearind = wx.StaticText(self.panel,gr,style=wx.ALIGN_CENTER)
self.Gearind.SetMinSize((50,43))
self.Gearind.SetForegroundColour(wx.Colour(122,7))
self.Gearind.SetFont(wx.Font(32,wx.FONTSTYLE_SLANT,""))
sizer_1.Add(self.Gearind,0)
self.panel.SetSizer(sizer_1)
self.Layout()
def OnKeyUp(self,evt):
code = evt.GetKeyCode()
gr = self.Gearind.GetLabel()
if gr.isnumeric():
gr_up = int(gr) + 1
gr_down = int(gr) - 1
else:
gr_up = 1
gr_down = 0
if gr_up > 6:
gr_up = 6
if gr_down < 1:
gr_down = "N"
if code == wx.WXK_UP:
self.Gearind.SetLabel(str(gr_up))
elif code == wx.WXK_DOWN:
self.Gearind.SetLabel(str(gr_down))
gr = self.Gearind.GetLabel()
if gr == "N":
var = 0
else:
var = int(gr)
self.gauge_1.SetValue(var)
evt.Skip()
class MyApp(wx.App):
def OnInit(self):
self.Test = MyFrame(None)
self.SetTopWindow(self.Test)
self.Test.Show()
return True
if __name__ == "__main__":
app = MyApp(0)
app.MainLoop()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。