Ответы пользователя по тегу Python
  • Как показывать изменение текстовом документе через Text?

    Вы можете настроить прокси для виджета, и в этом прокси вы сможете определять, когда что-либо было вставлено или удалено. Вы можете использовать эту информацию для создания виртуального события, которое может быть связано с любым другим событием.

    Начнем с создания собственного класса текстового виджета, который вы будете использовать, как и любой другой текстовый виджет:
    import Tkinter as tk
    
    class CustomText(tk.Text):
        def __init__(self, *args, **kwargs):
            """A text widget that report on internal widget commands"""
            tk.Text.__init__(self, *args, **kwargs)
    
            # create a proxy for the underlying widget
            self._orig = self._w + "_orig"
            self.tk.call("rename", self._w, self._orig)
            self.tk.createcommand(self._w, self._proxy)
    
        def _proxy(self, command, *args):
            cmd = (self._orig, command) + args
            result = self.tk.call(cmd)
    
            if command in ("insert", "delete", "replace"):
                self.event_generate("<<TextModified>>")
    
            return result


    Прокси-сервер в этом примере выполняет три функции:

    1. Сначала он вызывает фактическую команду виджета, передавая все полученные аргументы.
    2. Затем он генерирует событие для каждой вставки и каждого удаления.
    3. Затем он генерирует виртуальное событие
    4. И, наконец, он возвращает результаты фактической команды виджета.

    Вы можете использовать этот виджет точно так же, как любой другой текстовый виджет, с дополнительным преимуществом, которое вы можете привязать к <>.

    Например, если вы хотите отобразить количество символов в текстовом виджете, вы можете сделать что-то вроде этого:
    root = tk.Tk()
    label = tk.Label(root, anchor="w")
    text = CustomText(root, width=40, height=4)
    
    label.pack(side="bottom", fill="x")
    text.pack(side="top", fill="both", expand=True)
    
    def onModification(event):
        chars = len(event.widget.get("1.0", "end-1c"))
        label.configure(text="%s chars" % chars)
    
    text.bind("<<TextModified>>", onModification)
    
    root.mainloop()


    И Вам останеться просто прикрутить это всё на обычном взаимодействии с файлом "text.txt"
    Ответ написан
    Комментировать
  • Как переделать скрипт telebot в aiogram?

    @dp.message_handler(content_types=types.ContentTypes.TEXT)
    async def skye(message: types.Message):
        if message.text.lower() in ('пока', 'гудбай'):
            await message.answer('пока')
        if message.text.lower() in ('привет', 'хай'):
            await message.answer('привет')
    Ответ написан
    Комментировать