Tkinter: основной поток не находится в основном цикле

Я получил эту ошибку немного назад, поэтому я начал помещать код в main, который временно устраняет проблему. Но теперь я столкнулся с контрольно-пропускным пунктом, поскольку мне кажется, что не удается запустить код вне моего скрипта? Для тех, кому интересно, это будет инструмент для создания снимков экрана, у меня есть код, работающий для части скриншота, и я на полпути к обрезке, но я хотел объединить их вместе, ха-ха.

главный:

if __name__ == '__main__':
    def listen():
        with Listener(
                on_press=on_press,
                on_release=on_release) as listener:
                listener.join()
    def on_press(key):
        print('{0} pressed'.format(
            key))
    def on_release(key):
        print('{0} release'.format(
            key))
        if key == Key.print_screen:

            im = pysc.grab()
            im.save('P:/Python/temp/screenshot.png')            
            print("-------------------  Screenshot exported  -------------------")


            WIDTH, HEIGHT = 1919, 1079
            BACKGROUND = 'grey'
            TITLE = ' '

            root.title(TITLE)
            root.geometry('%sx%s' % (WIDTH, HEIGHT))
            root.configure(background=BACKGROUND)

            root.attributes("-fullscreen", True)

            app = Application(root, background=BACKGROUND)

            app.pack(side=tk.TOP, fill=tk.BOTH, expand=tk.TRUE)
            app.mainloop()

    listen()

Ошибка:

  File "P:\Python\screenshotselection - Copy.py", line 217, in on_release
    root.title(TITLE)
  File "C:\Program Files (x86)\Python38-32\lib\tkinter\__init__.py", line 2217, in wm_title
    return self.tk.call('wm', 'title', self._w, string)
RuntimeError: main thread is not in main loop

person Incineratinq    schedule 22.11.2019    source источник
comment
Очень вероятно, что pynput несовместим с tkinter, потому что они оба хотят обрабатывать события пользовательского ввода. tkinter делает это в своем файле mainloop().   -  person martineau    schedule 22.11.2019
comment
Возможный дубликат Как запустить pynput.Listener одновременно с tkinter .Tk().mainloop()   -  person stovfl    schedule 22.11.2019
comment
@martineau, это имело бы смысл. Каков наилучший способ обработки ввода с клавиатуры?   -  person Incineratinq    schedule 22.11.2019
comment
@stovfl, судя по всему, у tkinter есть способ обработки ввода с клавиатуры, так что я попробую, спасибо   -  person Incineratinq    schedule 22.11.2019
comment
Возможно, вы сможете сделать это только с помощью tkinter. У него есть способы привязки событий к функциям. Вот некоторые (слегка устаревшие) документация.   -  person martineau    schedule 22.11.2019
comment
Почему вы используете прослушиватель? Tkinter имеет встроенную поддержку обработки событий. Вам не нужно использовать прослушиватель.   -  person Bryan Oakley    schedule 22.11.2019
comment
Я нашел дополнительную документацию по событиям и привязке здесь, и это не так. похоже, вы можете слушать без фокуса, а я хочу, чтобы программа бесконечно слушал в фоновом режиме. Кто-нибудь знает, как это сделать с помощью tkinter?   -  person Incineratinq    schedule 23.11.2019