如何解决Tkinter中复选框与文本不对齐的问题?
修复Tkinter复选框与文本对齐问题
你推测的完全正确——问题根源就是文本文件里的换行符被readlines()一并读取了。readlines()会保留每行末尾的\n,导致复选框的文本后面多了一个换行,显示时文本会跑到复选框的下一行,自然就不对齐了。
修复方法
只需要去掉每行末尾的换行符即可,有两种简单的实现方式:
方式1:读取文件时直接处理
在读取行内容的时候就去掉换行符:
import tkinter as tk root = tk.Tk() root.geometry("200x300") root.title("Test") with open("test.txt", "r") as file: # 遍历文件每行,仅去掉末尾的换行符 lines = [line.rstrip('\n') for line in file] # 用列表生成式简化IntVar的创建 checkboxes = [tk.IntVar() for _ in lines] for i, line in enumerate(lines): c = tk.Checkbutton(root, text=line, variable=checkboxes[i]) c.pack() root.mainloop()
方式2:创建复选框时处理文本
如果不想修改读取逻辑,也可以在设置复选框文本时去掉换行符:
import tkinter as tk root = tk.Tk() root.geometry("200x300") root.title("Test") with open("test.txt", "r") as file: lines = file.readlines() checkboxes = [] for line in lines: checkboxes.append(tk.IntVar()) for i, line in enumerate(lines): # 去掉当前行末尾的换行符后再设置文本 c = tk.Checkbutton(root, text=line.rstrip('\n'), variable=checkboxes[i]) c.pack() root.mainloop()
细节说明
rstrip('\n')只会去掉每行末尾的换行符,不会影响行内或行首的空白字符;- 如果你的文本行前后没有需要保留的空白,也可以用
strip(),它会去掉所有前后的空白字符(包括换行、空格、制表符等)。
内容的提问来源于stack exchange,提问作者Jonken
相关产品推荐
相关产品推荐

