簡體   English   中英

如何在 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())

[...]如何確保始終定義 Ser ?

通過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語句

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM