如何在Tkinter的Text组件中居中显示图片?
Tkinter Text组件图片居中解决方案
主应用中点击按钮可打开从文件系统导入的文本格式帮助文件,要求在文本前显示图片且图片居中。当前代码已实现图片显示,但无法在Text组件内让图片居中;组件层级为root→TopLevel→带滚动条的Frame→Text,滚动功能正常,且因需要最大文本格式灵活性,必须保留Text组件,后续还需处理导入文本中的嵌入格式标签问题。
原代码如下:
def txt_wig(self): global img img = PhotoImage(file='spreadsheet.gif') toplvl = Toplevel(root,padx=20,pady=20) toplvl.geometry('700x600') toplvl.configure(border = 10, relief = 'sunken', padx=10, pady=10) frame1 = Frame(toplvl,pady=10) frame1.pack() text_scroll = Scrollbar(frame1, orient="vertical") text_scroll.pack(side="right", fill="y") text = Text(frame1, font = ('Arial', 15),yscrollcommand=text_scroll.set) text.image_create(END, image=img) text_scroll.config(command=text.yview) text.insert(END,'\nGroup Net Meter Utility\n','center', 'big') with open('HelpDoc.txt', 'r') as f: text.insert(INSERT, f.read()) text.config(state=NORMAL) text.pack(side=LEFT, fill=Y)
解决方案
要实现Text组件内的图片居中,核心是利用**标签(tag)**控制嵌入对象的对齐方式,具体步骤如下:
- 配置居中标签:设置标签的
justify属性为'center',用于控制内容对齐 - 绑定图片到居中标签:调用
image_create时通过tag参数将图片与居中标签关联
修改后的完整代码:
def txt_wig(self): global img img = PhotoImage(file='spreadsheet.gif') toplvl = Toplevel(root,padx=20,pady=20) toplvl.geometry('700x600') toplvl.configure(border = 10, relief = 'sunken', padx=10, pady=10) frame1 = Frame(toplvl,pady=10) frame1.pack() text_scroll = Scrollbar(frame1, orient="vertical") text_scroll.pack(side="right", fill="y") text = Text(frame1, font = ('Arial', 15), yscrollcommand=text_scroll.set) # 配置居中标签,控制内容对齐 text.tag_configure('center', justify='center') # 给图片绑定居中标签,实现图片居中 text.image_create(END, image=img, tag='center') text_scroll.config(command=text.yview) text.insert(END,'\nGroup Net Meter Utility\n','center', 'big') with open('HelpDoc.txt', 'r') as f: text.insert(INSERT, f.read()) text.config(state=NORMAL) text.pack(side=LEFT, fill=Y)
补充说明
- 若需要更精确的居中适配(比如根据Text组件宽度调整图片位置),可以通过计算组件可用宽度,结合插入空格或调整标签的
margin属性实现,上述方法已能满足基础居中需求 - 后续处理文本嵌入格式标签时,可继续扩展Text组件的标签系统,解析自定义标签并配置对应格式(如字体大小、颜色、对齐等)
内容的提问来源于stack exchange,提问作者MikeNH
相关产品推荐
相关产品推荐

