#python #tkinter
#python #tkinter
Вопрос:
У меня есть задача, в которой мы перечисляем 10 элементов из HTML с использованием регулярных выражений.
Мне удалось перечислить 10 вещей с веб-сайта, но мне нужны цифры рядом с ними при отображении на tkinter.
Например, от 1 до 10 и / или от 10 до 1, как это: пример:
Я знаю, что мне нужно использовать цикл for, но я не знаю как, и уже довольно давно занимаюсь исследованиями.
Вот мой код для одного из моих окон:
def hidden_gems_on_disney_window():
hidden_gems_on_disney = Tk()
hidden_gems_on_disney['bg'] = 'pink'
hidden_gems_on_disney.title('10 Hidden Gems On Disney ')
hidden_gems_on_disney.geometry('500x500')
Label(hidden_gems_on_disney, text = '10 Hidden Gems On Disney You Totally Missed', bg = 'SeaGreen2', font = ('Calibri', 15)).place(x=50, y=45)
url = 'https://screenrant.com/disney-plus-hidden-gems/'
web_page = urlopen(url)
web_page_contents = web_page.read().decode('UTF-8')
#the pattern that I found to list my top 10.
regex = r'(?<=</span>)(.*)(?=</h2>)'
#-------------------------------------------
disney_plus = re.findall(regex, web_page_contents)
x_coord = 40
y_coord = 90
#This for loop shows top 10 contents on this website. There are already just 10 names, so in this case, it is not neccasery to use counter.
for hidden_gems in disney_plus:
Label(hidden_gems_on_disney, text = hidden_gems, bg ='pink', font = ('Malgun', 10)).place(x= x_coord, y= y_coord)
y_coord = y_coord 38
#Label for the hyperlink. Once clicked, it opens a browser and shows the webpage where data comes from.
most_popular_songs_link = Label(hidden_gems_on_disney, text = 'https://screenrant.com/disney-plus-hidden-gems/', fg='dark green')
most_popular_songs_link.place(x = 110, y = 475)
most_popular_songs_link.bind('<Button-1>', lambda e: callback(url))
mainloop()
Поскольку этот веб-сайт занимает от 10 до 1, я хочу отображать числа от 10 до 1, но также хотел бы посмотреть, как это сделать для от 1 до 10, если это как-то отличается.
Комментарии:
1. Пожалуйста, покажите, какой код у вас уже есть для графического интерфейса tkinter. Какой виджет вы используете для отображения списка?
2. Кстати, использование
place()
является ненужным усложнением.pack()
или.grid()
проще в использовании (нет необходимости вычислять смещение, чтобы виджеты не перекрывались).3. почему вы удалили свой опубликованный код?
Ответ №1:
Вы можете использовать enumerate()
функцию в for
цикле:
font = ('Malgun', 10)
for i, hidden_gems in enumerate(disney_plus[::-1], 1): # in reverse order
Label(hidden_gems_on_disney, text='{})'.format(i), bg='pink', font=font).place(x=x_coord, y=y_coord)
Label(hidden_gems_on_disney, text=hidden_gems, bg='pink', font=font).place(x=x_coord 25, y=y_coord)
y_coord = 38
Ответ №2:
Добавьте счетчик в свой цикл.
#This for loop shows top 10 contents on this website. There are already just 10 names, so in this case, it is not neccasery to use counter.
counter=10;
for hidden_gems in disney_plus:
Label(hidden_gems_on_disney, text = str(counter) ". " hidden_gems, bg ='pink', font = ('Malgun', 10)).place(x= x_coord, y= y_coord)
y_coord = y_coord 38
counter = counter -1
Если вы хотите увеличить счетчик, инициализируйте с counter=1
помощью и увеличьте с помощью counter = counter 1