python - 如何在整个类中声明一个全局变量?
问题描述
我是 python 的新手,我正在尝试编写一个程序,通过选定的 COM 端口连接到 Arduino 并不断更新状态(连接或断开连接)
我正在使用每 1 秒更新一次的计时器。这里的问题是每次我运行代码时,它都说Ser
in Ontimer
is not defined 即使我之前在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())
解决方案
[...]如何确保始终定义 Ser ?
Ser
通过以下方式在全局命名空间中初始化变量None
:
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
语句。
推荐阅读
- mule-studio - Unable to resolve reference to Class loaded via External library
- visual-studio - Visual Studio 中的 CMake 设置问题
- ruby-on-rails - 浏览器中的 Rails API 路径给出此错误 NoMethodError undefined method `[]' for nil:NilClass
- sql - Power Bi SQL - 不支持语义查询
- amazon-web-services - 如何使用Lamda函数在RDS中使用CDK创建表?
- functional-programming - 如何正确使用 Result.bind
- java - 根据JAVA列表内对象的属性将新对象添加到对象列表中
- file - WSO2 流式集成器 - 读取大文件(一百万条记录)并写入另一个文件
- python - 'C:\Users\HP' 不是内部或外部命令、可运行程序或批处理文件
- python - 机器人框架:当我运行基本程序时,chrome 浏览器不起作用(我使用了 vscode)