Задать вопрос
  • Как правильно вызвать метод одного класса из другого?

    Vindicar
    @Vindicar
    Only4You, и снова: в одну сторону - не проблема. А вот "и наоборот" намекает, что у тебя неправильно распределены обязанности по классам. Кто-то из них занимается не своим делом. Может даже оба, такое бывает.
    Если это два разных компонента, то наладить взаимодействие между ними - задача App.
    Если не два компонента, а один, он должен быть оформлен как один класс который внутри себя уже налаживает взаимодействие между своими "подчинёнными".
    Я бы вообще сделал вот так

    from tkinter import *
    from tkinter import ttk
    
    class App(Tk):
        def __init__(self, parent):
            super().__init__()
            self.title('Main window')
            self.geometry('400x350+800+400')
            self.__put_frames()
    
        def __put_frames(self):  # наш, приватный метод - не надо выставлять его наружу
            self.statusbar = Statusbar(self)
            self.statusbar.grid(row=1, column=0, columnspan=3)
            
            self.footerbar = Footterbar(self)
            # передаём метод, который надо вызвать
            # footerbar всё равно не имеет понятия, чей это метод
            # он только знает, что его надо вызвать по клику на кнопку 6
            # мы могли бы создать метод в App и передать его, это бы тоже сработало
            # собственно, задача App - связать два компонента между собой
            self.footerbar.button6_clicked = self.statusbar.refresh  
            self.footerbar.grid(row=2, column=0, columnspan=3)
    
    class Statusbar(Frame):
        """Этот класс реализует строку состояния, которая умеет показывать текст."""
        def __init__(self, parent):
            super().__init__(parent)
            self.__put_widgets()
    
        def __put_widgets(self):  # наш, приватный метод - не надо выставлять его наружу
            self.txt = Text(self, height=15, width=35)
            self.txt.grid(row=1, column=0, columnspan=3)
    
        def refresh(self):
            self.txt.delete(1.0, END)
            self.txt.insert(END, "Updated content")
    
    class Footterbar(Frame):
        """Этот класс реализует панель с нажимаемыми кнопками, и позволяет отреагировать на их нажатие"""
        def __init__(self, parent):  # мы ничего не знаем про статусбар
            super().__init__(parent)
            self.button6_clicked = None  # тут будет храниться ссылка на метод
            self.__put_widgets()
    
        def __button6_click(self):
            if self.button6_clicked is not None:  # у нас есть что вызывать?
                self.button6_clicked()  # да - вызываем
    
        def __put_widgets(self):  # наш, приватный метод - не надо выставлять его наружу
            self.btn4 = ttk.Button(self, text='4')
            self.btn4.grid(row=10, column=0)
            
            self.btn5 = ttk.Button(self, text='5')
            self.btn5.grid(row=10, column=1)
            
            self.btn6 = ttk.Button(self, text='6', command=self.__button6_click)
            self.btn6.grid(row=10, column=2)
    
    app = App(Tk)
    app.mainloop()

    Написано
  • Как правильно вызвать метод одного класса из другого?

    Vindicar
    @Vindicar
    Only4You, погоди, ты реши, какой объект каким владеет.
    У тебя statusbar внутри footerbar, или наоборот?
    В первом случае footerbar владеет statusbar, и statusbar должен получить ссылку на него как на владельца через параметр __init__(), но не наоборот.
    Ну а если statusbar владеет footerbar, то наоборот.
    Просто представь, что твой интерфейс - дерево. App - ствол. А как дальше от него ветви идут? "Ветка" всегда получает параметром то, к чему она крепится.
    Написано
  • Что эффективнее: np.array_equal или (A == B).all()?

    Vindicar
    @Vindicar
    Ланской Кирилл, А ты исходник посмотри. array_equal() еще много чего делает: приводит входные коллекции к массиву (для == и A и B уже должны быть массивами), отдельно обрабатывает ситуацию, когда в массиве есть NaN (простое сравнение считает, что NaN не равно ничему, в т.ч. самому себе). Вот и набегает 30% разницы.
    Написано
  • Как грамотно распределять по websocket данные получаемые из одного источника?

    Vindicar
    @Vindicar
    ALEXU83, тут вообще нужно уточнить, что тебе нужно.
    Просто размножить поток на несколько клиентов, и пусть они сами разбираются? Или иметь какую-то историю? И должна ли история быть персистентной, т.е. переживать перезапуск?

    Потому что в первом случае по идее можно разрулить без БД, достаточно иметь словарь "тикер-вебсокеты". Поступила новая запись, смотрим её тикер, смотрим, кто вот прямо сейчас имеет активный вебсокет и подписан на этот тикер, рассылаем. Как на питоне это соорудить, я примерно могу представить, а вот на пхп, извини, не мой профиль.

    А насчёт мощности, извини, встречный вопрос: сколько клиентов у тебя будет? Потому что единицы записей в секунду - это не сказать чтобы супер много. Если клиентов в пределах сотни, то ИМХО можно оба сервиса на одной vps запустить, и ещё резерв останется.
    Написано
  • Как исправить: TypeError: bad operand type for unary ~: 'type'?

    Vindicar
    @Vindicar
    smit_emae, для начала - написать, как называется библиотека, на которой ты пишешь бота, и её версию. Эту инфу вообще полезно в вопрос добавлять, а то пока нагуглишь, какая из них при импорте называет себя telegram...
    Написано
  • Как исправить: TypeError: bad operand type for unary ~: 'type'?

    Vindicar
    @Vindicar
    не прокатит, логическое отрицание кастует аргумент в bool сначала.
    Написано
  • Почему не работает on_member_join?

    Vindicar
    @Vindicar
    Timurkaaa, а в настройках бота в дискорде этот интент включил? Он привилегированный.
    Написано
  • Почему питон не видит библиотеку, хотя она есть в окружении?

    Vindicar
    @Vindicar
    Studencheskaya32,
    запускаю оболчку питона

    Какая версия питона в оболочке?
    Написано
  • Как убрать ошибку кода в exe?

    Vindicar
    @Vindicar
    1parahon, я не загадками говорю, а пытаюсь показать, как и где искать ответ. Чтобы в следующий раз ты мог найти его сам.
    Да, я мог бы сказать "в секции advanced должен быть параметр hidden imports, впиши туда имя модуля, а если его нет - то посмотри внизу, там где приведена полная командная строка для вызова pyinstaller, и попробуй добавить туда --hidden-import имя.модуля перед запуском".
    Но одно дело - сделать по бумажке, другое - сделать, понимая, что ты делаешь и почему.
    Написано
  • Как убрать ошибку кода в exe?

    Vindicar
    @Vindicar
    1parahon, а ты прочитай мой ответ внимательно и подумай. Я тебе написал, как называется ситуация, когда pyinstaller не видит модуль.
    Написано
  • Как исправить код?

    Vindicar
    @Vindicar
    minamisa, что-то у тебя первый код кривой, как не знаю что.
    Отступы куда-то подевались, подчёркивания вокруг названия __init__() куда-то подевались, в цикле создаёшь слои одного и того же размера, а их размер должен уменьшаться. Вполне очевидно, что первый и последний слой должны быть вне цикла, так как их размеры не вписываются в логику "19, 18, ..., 11". В общем, исправляй сначала это.
    Написано
  • Как исправить код?

    Vindicar
    @Vindicar
    Блин, курс-то кто проходит - ты или хабр?
    Пиши конкретно, в чём сложность.
    Написано
  • Ошибка в коде py. Как написать код?

    Vindicar
    @Vindicar
    temik2898, а ты посмотри внимательно. Кнопку </> в редакторе текста видишь? А кнопку-меню ... справа внизу от вопроса? Вот и действуй.
    И убедись, что ты запускаешь именно тот код, который показываешь (ну, с поправкой на токен, конечно).
    Написано
  • Проблема с обучением змейки на python, почему она не обучается быть эффективней?

    Vindicar
    @Vindicar
    Копаться в коде вряд ли кто-то будет, но можно задать наводящие вопросы.
    В первую очередь, ты должен как-то оценивать качество работы каждой "особи" - иными словами, написать какую-то целевую функцию, которая численно выразит, насколько та или иная особь хороша.
    Какие факторы ты учитываешь в этой функции, и как она в целом выглядит?
    Написано
  • Как сделать подсчет скорости нажатий на пробел?

    Vindicar
    @Vindicar
    Антон, а ничего, что питоновский input() ждёт нажатия enter? =)
    Написано
  • Как решать такие задачи?

    Vindicar
    @Vindicar
    U235U235, я про выход слоя 4. ОП не привёл никаких подсказок, как должен выглядить слой out, так что нельзя определить, сколько выходов должно быть в слое 4 - только число входов.

    EDIT: ой, блин, я невнимательный. Не увидел, что слои идут не 1->2->3->4, а 4->3->4.
    Написано
  • Что использовать в качестве workerА для отложенных задач?

    Vindicar
    @Vindicar
    Everything_is_bad, как я понял, schedule и aioschedule всё-таки ориентируются на задачи вида "делай X каждые Y часов/минут/секунд". Такие задачи могут быть просто пересозданы при перезапуске программы, и все дела. Для разовых задач с длительным (дни/недели/месяцы) ожиданием нужна персистентность созданных задач, а я в их доках не увидел никакой поддержки персистентности (хотя может плохо смотрел).
    Так что, боюсь, эти либы тут не очень-то помогут. Разве что периодическую проверку "не пора ли напоминать" через них делать, но если других периодических задач в системе нет, то это оверкилл.
    Написано
  • Что использовать в качестве workerА для отложенных задач?

    Vindicar
    @Vindicar
    zven_bpe, я бы использовал для ожидания не asyncio.sleep(), а asyncio.Event.wait() завёрнутое в asyncio.wait_for(). Тогда, чтобы прервать сон, достаточно взвести этот event.
    Написано
  • Как правильно расставить классы?

    Vindicar
    @Vindicar
    Влад Григорьев, это конвейер подготовки изображения в pytorch. Но да, автору стоило это написать.
    Написано
  • Как сделать так чтобы она автоматически перезагружалась в программе EsPy Python?

    Vindicar
    @Vindicar
    А если второе - открываешь учебник по питону и читаешь про цикл while.
    И на будущее - оформляй код как положено. Кнопка </> в помощь.
    Написано