如何在整个class中声明一个全局变量?
How to declare a global variable throughout a class?
我是 python 的新手,我正在尝试编写一个程序,通过选定的 COM 端口连接到 Arduino 并不断更新状态(连接或断开连接)
我正在使用每 1 秒更新一次的计时器。这里的问题是每次我 运行 代码时,它都会说 Ontimer
中的 Ser
未定义,即使我之前在 on_press
中声明过它。我该如何解决这个问题?
class GuiFrame(wx.Frame):
def __init__(self,parent,title):
super().__init__(parent, title = title, size =(950,550))
self.InitUI()
def InitUI(self):
panel = wx.Panel(self)
self.timer = wx.Timer(self, 1)
self.timer.Start(100)
self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer)
st1 = wx.StaticText(panel, label='COM port: ', pos=(5, 5))
self.text_ctrl = wx.TextCtrl(panel, pos=(5, 30))
my_btn = wx.Button(panel, label='Enter', pos=(5, 65))
my_btn.Bind(wx.EVT_BUTTON, self.on_press)
self.sb = self.CreateStatusBar()
def on_press(self,event):
global Ser
com = self.text_ctrl.GetValue()
if not com:
print("Please enter port!")
else:
Ser = SerialCom(com,115200)
self.sb.SetStatusText(Ser.connect())
time.sleep(1)
def OnTimer(self, event):
global Ser
self.sb.SetStatusText(Ser.status())
[...] how can I make sure that Ser is always defined?
通过None
初始化全局命名空间中的变量Ser
:
Ser = None
在读取之前检查 Ser != None
:
class GuiFrame(wx.Frame):
def on_press(self,event):
global Ser
com = self.text_ctrl.GetValue()
if not com:
print("Please enter port!")
else:
Ser = SerialCom(com,115200)
self.sb.SetStatusText(Ser.connect())
time.sleep(1)
def OnTimer(self, event):
if Set != None:
self.sb.SetStatusText(Ser.status())
注意,如果只是尝试读取变量,则不需要global
statement。
我是 python 的新手,我正在尝试编写一个程序,通过选定的 COM 端口连接到 Arduino 并不断更新状态(连接或断开连接)
我正在使用每 1 秒更新一次的计时器。这里的问题是每次我 运行 代码时,它都会说 Ontimer
中的 Ser
未定义,即使我之前在 on_press
中声明过它。我该如何解决这个问题?
class GuiFrame(wx.Frame):
def __init__(self,parent,title):
super().__init__(parent, title = title, size =(950,550))
self.InitUI()
def InitUI(self):
panel = wx.Panel(self)
self.timer = wx.Timer(self, 1)
self.timer.Start(100)
self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer)
st1 = wx.StaticText(panel, label='COM port: ', pos=(5, 5))
self.text_ctrl = wx.TextCtrl(panel, pos=(5, 30))
my_btn = wx.Button(panel, label='Enter', pos=(5, 65))
my_btn.Bind(wx.EVT_BUTTON, self.on_press)
self.sb = self.CreateStatusBar()
def on_press(self,event):
global Ser
com = self.text_ctrl.GetValue()
if not com:
print("Please enter port!")
else:
Ser = SerialCom(com,115200)
self.sb.SetStatusText(Ser.connect())
time.sleep(1)
def OnTimer(self, event):
global Ser
self.sb.SetStatusText(Ser.status())
[...] how can I make sure that Ser is always defined?
通过None
初始化全局命名空间中的变量Ser
:
Ser = None
在读取之前检查 Ser != None
:
class GuiFrame(wx.Frame):
def on_press(self,event):
global Ser
com = self.text_ctrl.GetValue()
if not com:
print("Please enter port!")
else:
Ser = SerialCom(com,115200)
self.sb.SetStatusText(Ser.connect())
time.sleep(1)
def OnTimer(self, event):
if Set != None:
self.sb.SetStatusText(Ser.status())
注意,如果只是尝试读取变量,则不需要global
statement。