Здравствуйте, мои друзья из StackOverflow. Я делал уроки wxPython и читал документацию, пока мне это нравится. Сначала я хотел сделать простое приложение. Это приложение будет отправлять команду микроконтроллеру на включение или выключение реле.
У меня есть глобальная переменная для получения COM-порта (вместо жесткого кодирования COM1, например)
Я не могу заставить эту переменную корректно обновляться. Вот код:
#!/usr/bin/env python
import wx
from firmata import *
# Arduino(port, baudrate=115200)
#arduino = Arduino(comListenPort)
#arduino.pin_mode(7, firmata.OUTPUT)
comListenPort = 'Is not set'
getComPort = 'Not Set'
class ArduinoDemo(wx.Frame):
def __init__(self, parent, id):
# Main window creation
wx.Frame.__init__(self, parent, id, 'Demonstration of Firmata', \
size = (300, 200))
# Content
mainPanel = wx.Panel(self)
# Open Contact button creation
relayOpen = wx.Button(mainPanel, label = 'Open Contact', \
pos = (25, 25), size = (120, 60))
# Close Contact button creation
relayClosed = wx.Button(mainPanel, label = 'Close Contact', \
pos = (150, 25), size = (120, 60))
# Binds click event from relayOpen to openRelay
self.Bind(wx.EVT_BUTTON, self.closeRelay, relayClosed)
# Binds click event from relayClose to closeRelay
self.Bind(wx.EVT_BUTTON, self.openRelay, relayOpen)
# Get correct COM port
getComPort = wx.TextEntryDialog(None, 'Enter COM Port', 'COM Port', '')
if getComPort.ShowModal() == wx.ID_OK:
comListenPort = getComPort.GetValue()
# # Debug
print getComPort.GetValue()
print comListenPort
# # /Debug
def openRelay(self, event):
#arduino.digital_write(7, firmata.HIGH)
# # Debug
print comListenPort # does not print correctly
# # /Debug
def closeRelay(self, event):
#arduino.digital_write(7, firmata.LOW)
# # Debug
print getComPort # does not print correctly
# # /Debug
if __name__ == '__main__':
app = wx.PySimpleApp()
frame = ArduinoDemo(parent = None, id = -1)
frame.Show()
app.MainLoop()
Теперь я предполагаю, что иметь глобальную переменную для этого было бы лучшим способом сделать это, но я полностью ищу предложения и указатели во всем. Тем не менее, comListenPort не получает значение моего поля TextEntryDialog. Я знаю, что это самая глупая вещь, которую я не замечаю.
Два отладочных оператора печати getComPort.GetValue () и comListenPort оба выводят правильные данные. Когда я нажимаю кнопку relayOpen или relayClosed, они говорят «не установлено» или «еще не установлено». Я надеюсь, что кто-то может дать мне какой-то смысл, я довольно ошеломлен (акцент на DUMB)
Еще раз спасибо