• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Залипание кнопки (button) в Tkinter. Как исправить?

Автор SergNLMK, 25.03.23, 20:57:33

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

SergNLMK

Написал приложение с помощью библиотеки Tkinter для пакетной замены фамилий в чертеже.
Все работает нормально, только во время выполнения цикла открывания и изменения чертежей залипает кнопка.

Залипание кнопк.jpg

Почитав информацию, выяснил, что это происходит из-за однопоточности Python и Tkinter.
Нашел видеоролик на Ютубе, как решить эту проблему с помощью библиотеки threading.

Но этот способ не помог, выскакивает ошибка. Выяснил, что COM-объекты, которые мы используем при работе с API КОМПАС, не дружат с библиотекой threading.
Как я понял, есть способы, подружить их, но информации мало и она на английском.

Сталкивались ли вы с такой проблемой? Есть ли простые способы решить проблему залипания кнопки?

Михаил88

25.03.23, 22:00:33 #1 Последнее редактирование: 25.03.23, 22:18:35 от Михаил88
Цитата: SergNLMK от 25.03.23, 20:57:33Сталкивались ли вы с такой проблемой? Есть ли простые способы решить проблему залипания кнопки?

Пример

# -*- coding: utf-8 -*-
import tkinter as tk


def replace_the_signatories():
    for i in range(0, 100000):
        lbl.config(text="Число №: " + str(i))
        root.update_idletasks()


root = tk.Tk()
root.geometry('500x200')
root.title("Тест")

lbl = tk.Label(root, text="Нажми на кнопку", font='Arial 16')
lbl.pack()
btn = tk.Button(root, text='Заменить подписантов', command=replace_the_signatories)
btn.pack()

root.mainloop()

нужно добавить root.update_idletasks()
+ Благодарностей: 1

SergNLMK

Цитата: Михаил88 от 25.03.23, 22:00:33нужно добавить root.update_idletasks()

Спасибо, огромное, Михаил! Получилось!

Кстати, root.update_idletasks() можно поставить и в начале функции. У меня так сработало.