我知道kivy中的任何循环都会中断主循环并导致问题。我正在编写和应用程序,需要等待控制台上的输入,通过条码扫描器发送,一旦它被扫描,它会在终端上以字符串形式发送代码,问题是如果我使用raw_input,那么主kivy循环会中断,那么是否有一种方法可以在不冲突kivy应用程序的情况下执行此操作?任何帮助非常感谢,非常感谢。有没有办法在不中断主循环的情况下在kivy应用程序中使用raw_input(或等价物)?
回答
我曾经遇到类似的情况(等待来自RFID阅读器的输入)。 我的最终解决方案是等待另一个守护程序线程的输入,并将任何可能的输入填入Queue()
,然后使用Kivy时钟定期读取该Queue()
。这是一个示例代码。
from queue import Queue, Empty
temp_queue = Queue()
READ_CARD_SLEEP_TIMEOUT = 5 # Seconds
EVENT_INTERVAL_RATE = 5
QUEUE_TIMEOUT = 1
def wait_for_blocking_io():
while True:
# Check whether input exists
data = handler.fetch_data()
if data:
temp_queue.put(data)
time.sleep(READ_CARD_SLEEP_TIMEOUT)
io_wait_thread = Thread(name='io_wait', target=wait_for_blocking_io, daemon=True)
io_wait_thread.start()
然后在你的主应用程序要求kivy Clock()
在temp_queue
检查可能的数据。示例代码:
class MainScreen(Screen):
def __init__(self):
super(MainScreen, self).__init__()
self.event = Clock.schedule_interval(self.listen_for_data, EVENT_INTERVAL_RATE)
# noinspection PyUnusedLocal
def listen_for_data(self, dt):
try:
data = temp_queue.get(timeout=QUEUE_TIMEOUT)
# Do whatever you want with data
except Empty:
pass
你好@Juggernaut感谢您的帮助。我有个问题,购物车变量来自哪里?另外,我注意到,从扫描的条形码输入(产品代码)会转到任何应用程序焦点,如即时终端上的终端,文本编辑器中的文本编辑器,以及任何文本输入(例如,常春藤文本输入,堆栈溢出评论框等),如果它是焦点,但如果没有文本输入FOCUSED什么也没有发生,我将不得不使用文本输入重点获取代码或将输入侦听工作即使没有关注文本输入字段? –
@AmonTzar我修正了'carts'的名字。这是由于我提到的项目复制。抱歉。但是,为什么你想要它将输入写入重点输入?我的意思是你为什么第一次用这种方式编程? – Juggernaut
TextInput是一个想法,因为使用raw_input和read()有问题,但最初我想(我宁愿)使用输入作为变量来使用它,我最终只是想显示扫描的代码到一个kivy标签,当然,当我的应用程序更先进使用它的数据库操作等...我有麻烦的是使应用程序只需使用任何扫描的代码没有任何问题。 –
- 1. 有没有办法在XSL-FO中使用'rowspan'的等价物?
- 2. 有没有办法在ASP.Net Forms页面中使用RedirectToAction或其他等价物?
- 3. 有没有办法在没有数据库的情况下将数据保存在Java EE应用程序中?
- 4. 有没有办法在不使用游标的情况下循环访问TSQL中的表变量?
- 5. 有没有办法在不使用选择器的情况下响应UIButton tap?
- 6. 在没有MVC应用程序的情况下使用模型
- 7. Java程序在没有提示的情况下循环两次
- 8. 有没有办法在我的应用程序中使用mstest
- 9. 有没有办法在不使用外部工具的情况下剖析java应用程序?
- 10. 有没有办法在不使用windows phone 7 marketplace的情况下发布windows phone 7应用程序?
- 11. 有没有什么办法可以在不使用Appstore和adhoc发布的情况下发布应用程序?
- 12. 有没有办法在不使用MSI的情况下部署.Net应用程序?
- 13. LABEL块可以在没有循环的情况下使用吗?
- 14. 有没有办法在不等待进程退出的情况下使用python子进程模块的Popen.communicate()?
- 15. 在没有应用程序委托的情况下在UIViewController中使用SystemSoundID?
- 16. 有没有办法在cql文件cassandra中应用循环?
- 17. 有没有办法在android webview应用程序中使用表情符号?
- 18. 有没有办法在没有QApplication :: exec()的情况下使用Qt?
- 19. 有没有办法在没有使用WMI的情况下管理Microsoft DNS?
- 20. 有没有办法在不使用节点的情况下使用聚合物的元素。 Js npm和鲍尔?
- 21. 在没有循环的情况下在R中复制值
- 22. 在没有循环的情况下在MySQL中更新多行
- 23. 在Go中有没有java.io.Reader等价物?
- 24. 可以在没有GLib主循环的情况下使用GStreamer吗?
- 25. 有没有办法在Silverlight中没有Webclient的情况下下载文件?
- 26. 有没有办法在没有中断点的情况下更新工作区或变量编辑器值
- 27. 有没有办法在不使用TimePickerDialog的情况下获取TimePicker的时间?
- 28. 有没有办法在循环中使用断言来查找页面
- 29. 有没有办法在没有DNS的情况下解决nginx上的多个应用程序?
- 30. 有没有办法在没有USB连接的情况下调试手机上的android应用程序?
您是否试过'sys.stdin.read()'?它不会阻止,但也可能不会返回任何内容。 –
另外我试图使用提供的代码(由扫描仪)来更新标签,我没有问题做这个,但我需要获取代码来更新标签,我不知道如何做到这一点,而不使用raw_input或sys.stdin.readline()。此外,如果在扫描时关注焦点,则代码将以TextInput文本打印,如果有帮助的话。 –
是的,我最初使用sys.std.readline(),但应用程序停止,如果没有扫描,而不是按照你的建议返回。 –