下面是代码的一部分,该代码打开文件并为寄存器中的每个人创建一个标签和检查按钮,但是当我运行该代码时,标签和检查按钮未对齐,我也不知道为什么。有人可以帮忙吗?
代码:
x=0
for line in open(register, "r"):
with open(register,"r") as file:
all_lines=file.readlines()
Label(registersuccess,text=all_lines[x]).grid(column=0,row=x)
Checkbutton(registersuccess,text="Present").grid(column=1,row=x)
x=x+1
问题:
Label
文本和Checkbutton
文本没有对齐?
您的问题是新行\n
。通过读取文本文件,每一行以\n
结尾。因此,您的text=line
变成text='Boy1\n'
,它是两行,并且未与Checkbutton
文本对齐。
import tkinter as tk
import io
register = """Boy 1
Girl 1
Boy 2
Girl 2
Boy 3
Girl 3
"""
class App(tk.Tk):
def __init__(self):
super().__init__()
# with open(register) as fh:
with io.StringIO(register) as fh:
for row, line in enumerate(fh):
line = line.strip()
tk.Label(self, text=line).grid(row=row, column=0)
tk.Checkbutton(self, text="Present").grid(row=row, column=1)
if __name__ == "__main__":
App().mainloop()
问题是文件中的行末尾有换行符,您可以使用字符串rstrip()
方法将其删除。由于每次都通过内部for
循环读取整个文件,因此您的处理效率也非常低下。
这里是避免这种情况以及解决问题的方法:
from tkinter import *
register = 'register.txt'
root = Tk()
registersuccess = Frame(root)
registersuccess.pack()
with open(register, "r") as file:
for row, line in enumerate(file):
line = line.rstrip() # Remove trailing newline.
Label(registersuccess, text=line).grid(column=0, row=row)
Checkbutton(registersuccess, text='Present').grid(column=1, row=row)
Button(registersuccess, text='Submit').grid(column=2, row=row+1)
root.mainloop()
结果: