Хобрук: Ваш путь к мастерству в программировании

Python: как отобразить элемент при переборе списка (Tkinter)

Я пишу программу для быстрого чтения, в которой я беру .txt со списком определений и отображаю ключевое слово, в то время как определение распечатывается слово за словом ниже, имитируя устройство для быстрого чтения Spritz. Все это делается в окне Tkinter.

Я составил список keyword=i[0], который содержит ключевое слово для каждой строки (i) в .txt, и список Definition=i[1:], который содержит определение, каждое слово имеет собственный токен.

Например, если строка 1 файла .txt — это «ошибка: ошибка в программе», мне нужно, чтобы вывод выглядел так.

bug:

    an

потом

bug:

    error

и так до конца определения. Затем «ошибка» заменяется следующим определяемым словом.

ТАК... как мне сохранить "ошибку" там, просматривая каждое слово определения? Это часть того, что у меня есть. В настоящее время он также печатает слова друг над другом, поэтому мне нужно удалить каждое слово, прежде чем оно будет заменено другим. Я впервые использую Tkinter, так что терпите меня.

def cycle_text(root, canvas, file_name, width, height, font_size, wpm):
    canvas.create_rectangle(0, 0, width, height, fill='Beige')
    topics = write_title(file_name)
    information = write_info(file_name)
    pause = 60/wpm
    for i in topics:
        canvas.create_text(200, 200, text=i, font = ('Courier', font_size))
    for j in information:
        for z in j:
            canvas.create_text(250, 250, text=z, font = ('Courier', font_size))
            time.sleep(pause)

Ответы:


1

При использовании метода create_ сохраняйте возвращаемое значение в переменную. Затем вы можете переключить его на другой текст с помощью config или itemconfig вместо того, чтобы создавать новые снова и снова. Например, используя виджеты Label:

wordlist = ['an', 'error', 'in', 'a', 'program']

def nextword(self, which):
    definitionword.config(text=wordlist[which])
    if which+1 < len(wordlist):
        self.root.after(self.wpm*1000/60, lambda: nextword(which+1))

self.theword = Label(self.canvas, text='bug')
self.theword.grid(row=0, column=0)
self.definitionword = Label(self.canvas, text='')
self.definitionword.grid(row=1, column=0)

self.nextword(0)

Это приближение. Вам нужно будет использовать свои собственные структуры данных и имена.

Если вы предпочитаете использовать create_text виджета Canvas вместо Label, попробуйте что-то вроде:

self.definitionword = self.canvas.create_text(250, 250, text=wordlist[0])
self.canvas.itemconfig(self.definitionword, text=wordlist[1])

По сути, вы будете хранить определенное слово отдельно от списка слов, составляющих его определение, а затем неоднократно перенастраивать виджет «Слова в определении» для отображения текста для следующего слова в определении.

Не используйте time.sleep для задержки событий в tkinter — то, как tkinter обновляет свой дисплей, заставляет sleep работать не так, как вы ожидаете. Вместо этого используйте метод after.

Загляните в tkinterbook на Effbot, чтобы найти много полезной информации о tkinter.

29.03.2015
Новые материалы

Введение в контекст React
В этом посте мы поговорим о Context API, который был представлен в React 16, и о том, как вы можете их использовать. Что такое контекст? Глядя на определение из react docs , оно..

Шлюз с лицензией OSS, совместимый с Apollo Federation v2, появится в WunderGraph
Сегодня мы рады сообщить, что мы сотрудничаем с поддерживаемой YC Tailor Technologies, Inc. для внедрения Apollo Federation v2. Реализация будет лицензирована MIT (Engine) и Apache 2.0..

Это оно
Ну, я официально уволился с работы! На этой неделе я буду лихорадочно выполнять последние требования Думающего , чтобы я мог сосредоточиться на поиске работы. Что именно это значит?..

7 полезных библиотек JavaScript, которые вы должны использовать в своем следующем проекте
Усильте свою разработку JavaScript Есть поговорка «Не нужно изобретать велосипед». Библиотеки — лучший тому пример. Это поможет вам написать сложные и трудоемкие функции простым способом...

Базовое руководство по переносу концепций обучения в глубокое обучение
Обзор По мере того, как машинное обучение становится все более мощным и продвинутым, модели, обеспечивающие эту расширенную возможность, становятся все больше и начинают требовать огромного..

C в C.R.U.D с использованием React-Redux
Если вы использовали React, возможно, вы знакомы с головной болью, связанной с обратным потоком данных. Передача состояния реквизитам от родительских компонентов к дочерним компонентам может..

5 обязательных элементов современного инструмента конвейера данных
В цифровом мире предприятия используют конвейеры данных для перемещения, преобразования и хранения огромных объемов данных. Эти конвейеры составляют основу бизнес-аналитики и играют..