Tkinter中点击按钮时如何将Python变量值插入HTML h3标签
实现方案
- 核心逻辑:三引号包裹的HTML本质是普通Python字符串,不需要调整模板定义方式,只要在按钮触发时完成字符串替换,再生成可访问的HTML文件即可。
- 具体操作步骤:
- 修改三引号定义的HTML模板,给空的
<h3>标签加上固定占位符,将原有<h3></h3>替换为<h3>__TITLE1_INSERT__</h3> - 在按钮绑定的
print_ticket函数中,先确认已拿到title1的有效值,再用字符串replace方法把模板里的占位符替换为title1的实际内容 - 将替换完成的完整HTML写入本地临时HTML文件,调用
webbrowser打开该文件即可
- 修改三引号定义的HTML模板,给空的
- 可直接复用的修改后代码片段:
# 修正后的HTML模板 text = ''' <!DOCTYPE html> <html> <head> <title>Hirams live entertainment</title> </head> <style> body { background-color: white; } </style> <h1>Admit One</h1> <h2>This is your ticket courtesy of Hiram's live entertainment</h2> <h3>__TITLE1_INSERT__</h3> <img src="https://www.nicepng.com/png/full/292-2923561_live-entertainment-lives-here-live-entertainment-png.png" width="700" height="1200" id="live"> </body> </html> ''' import os import tempfile import webbrowser import urllib.request # 修正tivoli函数里的内容截取bug def tivoli(): page_content = download("https://cinebar.com.au/movies/coming-soon/") # 截取电影标题 title_tag_start = page_content.find('<h4 class="movie-title">') title_content_start = title_tag_start + len('<h4 class="movie-title">') title_content_end = page_content.find("</h4>", title_content_start) global title1 title1 = page_content[title_content_start:title_content_end] # 截取出映日期 date_tag_start = page_content.find('<small>') date_content_start = date_tag_start + len('<small>') date_content_end = page_content.find("</small>", date_content_start) global title4 title4 = page_content[date_content_start:date_content_end] # 修正按钮触发函数 def print_ticket(): if t.get() == 1: # 若还未爬取到标题,先执行爬取逻辑 if 'title1' not in globals(): tivoli() # 替换模板占位符 final_ticket_html = text.replace('__TITLE1_INSERT__', title1) # 生成临时文件路径 temp_file_path = os.path.join(tempfile.gettempdir(), 'event_ticket.html') # 写入最终HTML内容 with open(temp_file_path, 'w', encoding='UTF-8') as f: f.write(final_ticket_html) # 打开生成的票券页面 webbrowser.open('file://' + temp_file_path) # 按钮定义 print_ticket = Button(frame_options, text="print ticket", command=print_ticket)
- 原有代码的其他问题修正说明:
- 原代码调用
urllib.request.urlopen前未导入urllib.request模块,运行会抛出名称错误,已在代码片段中补全导入 - 原代码截取网页内容时,查找结束标签没有传入起始位置参数,会匹配到页面中第一个结束标签而非目标标签后的位置,导致截取内容错误,已修正索引查找逻辑
- 原HTML模板中存在无对应开标签的冗余
</div>标签,已删除避免HTML结构异常
- 原代码调用
内容的提问来源于stack exchange,提问作者jacob g
相关产品推荐
相关产品推荐

