win10toast вызывает зависание окна tkinter - PullRequest
2 голосов
/ 26 мая 2020

Я вроде новичок ie в python, пытаюсь практиковаться, после нескольких часов экзаменов я понял, что проблема с моей программой связана с win10toast. Кажется, есть проблемы с tkinter window.

# -*- coding: utf-8 -*-
"""
Created on Sun May 24 18:18:00 2020

@author: MeTaNa
"""

'''
this program is simple, notifys u if battery is fully charged,
'''

from tkinter import Label, Tk, Button
import os
import psutil
import win10toast

# current_statues = percent + '% | ' + plugged


def preload():
    pass

def start():
    global percent
    global plugged
    battery = psutil.sensors_battery()
    plugged = battery.power_plugged
    percent = str(battery.percent)
    if plugged == False:
        plugged = "Not Plugged In"
    else:
        plugged = "Plugged In"
    if (psutil.sensors_battery().power_plugged == True) and (battery.percent == 100):
        print(percent + '% | ' + plugged)
        print('Unplug the Charger Please!')
        win10toast.ToastNotifier().show_toast('Battery Statues', 'Battery Full.\nUnplug the Charger Please!', icon_path='', duration=10)
        gui.after(5000, start)
    elif (psutil.sensors_battery().power_plugged == False) and (battery.percent != 100):
        print(percent + '% | ' + plugged)
        print('Not Charging...')
        win10toast.ToastNotifier().show_toast('Battery Statues', 'Charger Not Plugged', icon_path='', duration=10)
        gui.after(5000, start)
    else:
        print(percent + '% | ' + plugged)
        print('Charging...')
        win10toast.ToastNotifier().show_toast('Battery Statues', 'Charging...', icon_path='', duration=10)
        gui.after(5000, start)



def closer():
    try:
        os.system('TASKKILL /F /IM Bat2.exe')
    except Exception:
        print('already closed!')
    gui.destroy()



# create a GUI window
gui = Tk()
gui.resizable(False, False)
gui.geometry("200x200")
gui.configure(background="white")
gui.title("Battery Notifier")

battey_statues = Label(gui, text='percent')
battey_statues.pack()

button1 = Button(gui, text=' Start Script ', fg='white', bg='gray', command=start, height=2, width=9)
button1.pack()
button2 = Button(gui, text=' Stop Script ', fg='white', bg='gray', command=closer, height=2, width=9)
button2.pack()


# start the GUI
gui.after(100, preload)
gui.mainloop()

, когда я нажимаю кнопку start script, он вызывает функцию start, но он замораживает окно tkinter, я не понимаю, почему.

раньше у меня была проблема с tkinter и while loop, я решил с помощью метода after.

  • скрипт работает правильно без tkinter.

Итак, есть идеи, что мне делать?

1 Ответ

3 голосов
/ 26 мая 2020

Посмотрите исходный код win10toast (https://github.com/jithurjacob/Windows-10-Toast-Notifications/blob/master/win10toast/ init .py ). Обычный вариант - без резьбы, что приведет к зависанию gui, однако он также поддерживает опцию потоковой передачи.

Попробуйте начать свое уведомление со следующей

win10toast.ToastNotifier().show_toast('Battery Statues', 'Charging...', icon_path='', duration=10, threaded=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...