2013-07-20 5 views
1
while True: 
    x = [] 

    while True: 
     sense = 0 
     for i in range(0,4): 
      k = gpio.input(sensor) 
      if k = 1: 
       sense += 1 
       time.sleep(.005) 
     if sense == 0: 
      x = abc() 

выше фрагмент кода для GUI я сделал с помощью «Tkinter», который имеет пару кнопок (Выполненный на, System: Raspberry Pi; ОС: Fedora). один получает датчик работает, а второй, чтобы определить, присутствует ли объект. когда датчик (активный низкий) воспринимает объект более чем на 20 мельниц (после нажатия второй кнопки), он должен выполнить abc() (который является вычислением, связанным с перечнем x). «код без части GUI работает просто отлично», но зависает при вводе GUI! может кто-нибудь указать на любую возможную ошибку в этом блоке кода? ive рассмотрели несколько вопросов, которые были опубликованы здесь, и сделали несколько изменений, чтобы проверить, какая часть полного кода заставляет GUI зависать, и вроде сузился до этой части.Tkinter зависает при сенсорика (в цикле)

ответ

0

У вас есть две петли, постоянно работающие (но я не думайте, что первый из них не нужен, поскольку вы никогда не нарушаете второй) и звоните по телефону time.sleep. Если вы запустите этот код в потоке Tkinter, GUI будет не отвечать, потому что поток «занят», постоянно выполняя эти циклы.

Вы можете выполнить это в другом потоке и сообщить или даже лучше переписать его, чтобы периодически вызывать Tk.after (вместо time.sleep), чтобы получить значение датчика, а затем обновить содержимое графического интерфейса.