Ответы пользователя по тегу Tkinter
  • Почему не видно фото в окне ткинтер питон?

    @o5a
    Если ошибки не выдает, возможно по тому пути не те картинки, о которых думаете, или же они просто выходят за пределы окна (увеличьте видимое окно, чтобы увидеть). Можно сразу задать размер окна так:
    root=Tk()
    root.geometry('1000x1000')

    К тому же, насколько я вижу, предполагалось делать так, что это одна картинка (Label), которая рандомно "прыгает" по экрану? В таком случае нужно было не создавать новый Label (который будет перекрывать предыдущий), а только менять картинку на нем
    Т.е. в цикле вместо
    img=Label(image=phot)
    делать
    img.image=phot
    Ответ написан
    1 комментарий
  • Как нормально реализовать форму регистрации на Python + Tkinter?

    @o5a
    первое в регистрации при попытке ввести данные получает странную ошибку

    Потому что с именами путаница. Например, в reg используются элементы entryEPASS а на проверку передаются entryPASS.
    авторизации проверка логина проходит успешно, а абсолютно эдентичная проверка пароля ставит систему в тупик

    У вас там проверка вообще странная, ищете логин среди всех, затем пароль среди всех, а если совпадают так уходите в бесконечный цикл.
    И вообще, у Вас логины отвязаны от паролей, совпадение покажет даже для несовпадающих пар логин:пароль, даже если они просто есть в данных. Для нормальной проверки нужно хранить их попарно, например в виде словаря logins = {"логин1": "пароль1", ...}
    Правильнее было бы сделать проверку (используя ваши же переменные name, p) и вышеуказанный словарь
    if logins.get(name) == p:
    сразу проверит, что введенные логин и пароль совпадают.

    И саму проверку пароля лучше не привязывать к элементам интерфейса. Сделать функцию, просто принимающую готовые строки (логин, пароль) и выдающую результат проверки. А в эти функции передавать уже строки из нужных элементов интерфейса: entryPASS.get() и т.п.
    Ответ написан
    Комментировать
  • Как обработать нажатие кнопки во время работы цикла?

    @o5a
    Не надо использовать свои циклы, чтобы не вызывать конфликт с циклом tkinter. Для запуска по времени есть root.after(время в мс, функция), через нее же можно и цикл сделать.
    def something():
        if check != 0:
            # какие-то вычисления
            root.after(1000, something)
    
    # для запуска самого цикла из основного кода программы
    root.after(0, something)
    Ответ написан
    Комментировать
  • Почему горячая клавиша не привязывается к методу?

    @o5a
    Нажатие модификаторов по-другому определяется, через event.state
    ctrl  = (event.state & 4) != 0 # признак нажатия Ctrl
    Ответ написан
    2 комментария
  • Как в python tkinter изменить в рисунку canvas координаты с помощью itemconfig?

    @o5a
    canvas.coords(my_object, 10, 10, 90, 90)
    Ответ написан
    Комментировать
  • Как параллельно запустить две функции параллельно в данном классе?

    @o5a
    Для циклов tkinter есть after, который не нарушит цикл самой программы.
    Пример https://qna.habr.com/answer?answer_id=1897041
    Ответ написан
  • Не удаляется кнопка в tkinter python. Что делать?

    @o5a
    Не надо никаких глобалов. В данном случае можно вообще обойтись без промежуточной функции, просто привязать метод самой кнопки
    from tkinter import*
    
    def c():
        a = Button(text='ddd')
        a.grid()
        a.config(command=a.destroy)
    
    c()
    mainloop()


    Если все же нужна доп. функция (например доп. функционал), то передавать аргументы можно используя lambda/partial
    from tkinter import*
    
    def destroy_widget(widget):
        widget.destroy()
    
    def c():
        a = Button(text='ddd')
        a.grid()
        a.config(command=lambda:destroy_widget(a))
    
    c()
    mainloop()
    Ответ написан
    3 комментария
  • Как в python tkinter сохранить состояние Canvas?

    @o5a
    Эта команда создает формат не PNG, а Postscript. Можно его открыть в программе, понимающей данный формат.
    Или преобразовать в PNG с помощью PIL (но в системе должно быть установлено что-то, поддерживающее формат, например Ghostscript)

    # после создания нашего PS
    canvas.postscript(file="my_dram.ps", colormode="color")
    
    # преобразовываем в PNG
    from PIL import Image
    
    img = Image.open("my_dram.ps")
    img.save("my_dram.png", "png")
    Ответ написан
  • Как сделать кнопку проверки пути к файлу?

    @o5a
    Если уже используется глобальная pat то ее и нужно вызывать в rucheck (а параметр вообще убрать).
    def takeCSV():
        global pat
        pat = filedialog.askopenfilename(filetypes = (("CSV Files","*.csv"),))
        root.title(f'file at {pat}')
    
    def runCheck():
        global pat
        if pat != '':
            os.system(f'start {pat}')
    ....
    # и убрать параметр pat
    bCheck = Button(text='check', command=runCheck)


    Или можно вообще отказаться от глобальных и писать как атрибуты root
    def takeCSV():
        root.filename = filedialog.askopenfilename(filetypes = (("CSV Files","*.csv"),))
        root.title(f'file at {root.filename}')
    
    def runCheck():
        if root.filename:
            os.system(f'start {root.filename}')
    ....
    # и тоже убрать параметр pat
    bCheck = Button(text='check', command=runCheck)
    Ответ написан
    Комментировать
  • Почему неактивна кнопка?

    @o5a
    Чтобы передавать функцию с параметрами в команду, можно использовать partial
    from functools import partial
    
    def write(pulse, pressure, datetime):
        with open("pulse.txt", "w") as file:
            file.write(pulse.get())
    
    butt = Button(root, text="Записать", command=partial(write, pulse, pressure, datetime))
    Ответ написан
    2 комментария
  • Как с помощью python рисовать графические примитивы?

    @o5a
    Тогда зачем tkinter, в pygame можно и рисовать эти примитивы
    https://www.pygame.org/docs/ref/draw.html
    Ответ написан
    Комментировать
  • Как исправить ошибку - " mouse_position_print() takes 0 positional arguments but 2 were given"?

    @o5a
    Потому что функции, используемой в bind пытается передать 2 параметра:
    1 - self, т.к. она прописана как метод объекта paint_window
    2 - событие, которое передается всем функциям при использовании bind

    Соответственно эти параметры и надо прописать для своей функции
    def mouse_position_print (self, event):
    И по логике наверное хотели создать объекты window для экземпляра класса, т.е. надо их вынести в init
    def __init__(self):
        self.window = Tk()
        self.window.title("paint")
        self.window.geometry("1280x720+300+150")
    Ответ написан
    Комментировать
  • Как решить проблему с текстом в новом окне в Toplevel?

    @o5a
    def bu1():
      window = Toplevel(root, height=500, width=500)
      my_text = Text(window, width=60, height=20)
      my_text.pack(pady=20)
      my_text.insert(tk.INSERT, "текст2")
    Ответ написан
    Комментировать
  • Не открывается окно в tkinter python?

    @o5a
    ImportError: cannot import name 'messagebox' from partially initialized module 'tkinter' (most likely due to a circular import) (C:\path\path2\Programming\python\tkinter\tkinter.py)

    Не надо называть свои скрипты так же, как импортируемые библиотеки
    Ответ написан
  • Как полученные данные из файла предоставить в виде списка?

    @o5a
    У Вас второй кусок кода повторяет первый, не знаю, что хотели сделать.
    Если цель - разбить на строки и каждую строку на элементы, то можно так
    s = '''x1, z1, y1
    x2, z2, y2'''
    data = [row.split(', ') for row in s.splitlines()]
    print(data)
    # [['x1', 'z1', 'y1'], ['x2', 'z2', 'y2']]
    Ответ написан
    Комментировать
  • Как создать функцию по замене рисунка в виджете Tkinter?

    @o5a
    Сложно вот так сказать, куда именно добавить изменения среди этих кусков кода, но чтобы картинка сразу изменилась, в управляющей функции надо использовать label.configure
    # запуск изменения картинки
    topImg = PhotoImage(file="new_img.png")
    l.configure(image=topImg)
    l.image = topImg
    Ответ написан
    2 комментария
  • Проблема в архитектуре бд sqlite, что не так?

    @o5a
    Ошибку выдает потому, что запрос на вставку gender ('insert or ignore') пытается использовать ключи, а в таблице они не заданы.
    Например, так

    CREATE TABLE IF NOT EXISTS gender(gender text primary key)


    В остальном по структуре. Если все же делаете реляционную модель, то в таблице студентов должны храниться id из этих справочных таблиц (groupp, teacher и т.д.), а не сами значения. Тогда это позволит поддерживать уникальность значений, позволять использовать выбор значений из справочников (которыми и будут эти таблицы gender, teacher и т.д.).

    Пример, для учителя не просто таблица с teacher text, а таблица с ключевым полем, которое и используется для связки с таблицей студентов и остальными редактируемыми полями.

    CREATE TABLE IF NOT EXISTS teacher(
                teacher integer primary key,
                teacher_name text)


    Тогда по учителю можно будет добавлять и другие поля, характеризующие его, менять само имя(название/фамилию), при этом не нарушая связь по ключу с таблицей студентов. Выбор каждого поля для таблицы студентов будет выбором из текущих значений соответствующей справочной таблицы, а не ввод вручную.

    Если же полноценная реляционная модель не нужна, то нет и смысла делать отдельную таблицу под каждую сущность (они по факту не будут использоваться), можно все хранить напрямую в таблице студентов.
    Ответ написан
    1 комментарий