Python tkinter-如何修复标签并检查未对齐的按钮?

Python tkinter-如何修复标签并检查未对齐的按钮?,python,tkinter,Python,Tkinter,下面是一段代码的一部分,它打开一个文件,为登记册上的每个人创建一个标签和检查按钮,但当我运行代码时,标签和检查按钮没有对齐,我不知道为什么。有人能帮忙吗 代码: 问题:标签文本和检查按钮文本不对齐 您的问题是新行\n。通过读取文本文件,每行都以\n结尾。因此,您的text=line变为text='Boy1\n',它是两行,而不是与检查按钮文本排成一行 结果删除后,使用.strip()删除\n: 参考: 返回删除前导字符和尾随字符的字符串副本,chars参数默认为删除空白 返回已删除尾

下面是一段代码的一部分,它打开一个文件,为登记册上的每个人创建一个标签和检查按钮,但当我运行代码时,标签和检查按钮没有对齐,我不知道为什么。有人能帮忙吗

代码:

问题
标签
文本和
检查按钮
文本不对齐

您的问题是新行
\n
。通过读取文本文件,每行都以
\n
结尾。因此,您的
text=line
变为
text='Boy1\n'
,它是两行,而不是与
检查按钮
文本排成一行
结果删除后,使用
.strip()
删除
\n


参考

  • 返回删除前导字符和尾随字符的字符串副本,chars参数默认为删除空白

  • 返回已删除尾随字符的字符串副本,chars参数默认为删除空白

  • 返回一个元组,该元组包含计数和通过迭代iterable获得的值

  • 在处理文件对象时,最好使用with关键字。其优点是,该文件在其套件完成后会正确关闭



使用Python:3.5-“TclVersion”:8.6“TkVersion”:8.6

测试对齐问题是因为文件中的行都以换行符结尾,可以使用string
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()
结果:


你试过什么<代码>网格有许多选项。你试过了吗?我试过换粘性的和软垫的,但似乎没有改变
import tkinter as tk
import io

# Simulate the contents of the file 'register'
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):
                text = line.strip()
                
                tk.Label(self, text=text).grid(row=row, column=0)
                tk.Checkbutton(self, text="Present").grid(row=row, column=1)


if __name__ == "__main__":
    App().mainloop()
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()