我在这里要求一些高级别的建议。我正在使用Python绘制通过串行不断收到的数据。同时,我希望用户能够通过提示输入数据(例如Python shell)。然后,该数据将通过相同的串行端口发送,以与正在发送数据的设备进行通信。
我的问题是,绘图app.MainLoop()“线程”似乎阻止,它不会显示我的raw_input部分,直到窗口关闭。我也尝试将这4行放在我的while循环中,但同样的问题出现了 - 它让我输入所有的信息一次,但是一旦绘图开始它会永远阻塞,直到我关闭图形窗口。
if __name__ == '__main__':
app = wx.App()
window = DataLoggerWindow()
window.Show()
app.MainLoop()
prompt_counter = "main"
while(1):
if prompt_counter == "main":
ans = raw_input("Press f for freq, press a for amplitude: \n")
if ans == "f":
prompt_counter = "freq"
elif ans == "a":
prompt_counter = "amp"
else:
prompt_counter = "main"
elif prompt_counter == "freq":
freq = raw_input("Enter the frequency you want to sample at in Hz: \n")
ser.write("f"+freq+"\n")
prompt_counter = "main"
elif prompt_counter == "amp":
amp = raw_input("Type in selection")
ser.write("a"+amp+"\n")
prompt_counter = "main"
所有绘图部分都是读取串口,并打印收到的数据。两个部分分别与后端设备一起工作。所以我很确定这是我编写Python代码的问题,但我不确定为什么......任何想法?
答案 0 :(得分:1)
免责声明:我认为以下是不错的做法。
您可以将wx内容的执行放在一个单独的线程中。
app = wx.App()
window = DataLoggerWindow()
import threading
class WindowThread(threading.Thread):
def run(self):
window.Show()
app.MainLoop()
WindowThread().start()
这样,MainLoop
只阻止另一个线程,主线程仍然可用。
但是,我认为这不是最佳方法,你应该使用像App.OnIdle钩子这样的东西。