Клавиша «ES C» для прерывания l oop путем изменения переменной на False в Visual Studio - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть 2 файла в коде Visual Studio. « main.py » и « g_Global.py ». " g_Global.py " имеет следующий код:

import msvcrt

def key():
  if msvcrt.kbhit() and msvcrt.getch() == chr(27).encode():
    u = False

в " main.py " и имеет:

import g_Global as g

while x.lower() == 'n' and u == True:
  g.clear()
  print(y)
  y = input('Write a line to add. > ')
  g.key()
  if u == False:
    break

.. .но когда я запускаю код, когда я нажимаю «es c», ничего не происходит. Есть идеи?

1 Ответ

1 голос
/ 06 февраля 2020

При доступе к u из key(), u является локальной переменной. Вы должны добавить global u в начало, чтобы получить доступ к глобальной переменной. Даже в этом случае переменные в одном исходном файле не могут быть изменены из другого исходного файла. Вы должны объединить два исходных файла (переместить key() в другой исходный файл).

Кроме того, хотя я не знаком с msvcrt, в документации сказано, что getchr блокирует, пока не появится ключ для чтения. Так может просто избавиться от input() и kbhit()? Он может не подняться при побеге, поскольку это специальный ключ.

Пример: (Я не могу проверить, так как я не на MSV C)

import msvcrt

while u:
  if msvcrt.getch() == chr(27).encode():
     u = False
...