我知道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(),但應用程序停止,如果沒有掃描,而不是按照你的建議返回。 –