tkinter-如何解决标签和检查按钮未对齐的问题?

问题描述 投票:1回答:2

下面是代码的一部分,该代码打开文件并为寄存器中的每个人创建一个标签和检查按钮,但是当我运行该代码时,标签和检查按钮未对齐,我也不知道为什么。有人可以帮忙吗?

screenshot of current results

代码:

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
python tkinter
2个回答
0
投票

问题Label文本和Checkbutton文本没有对齐?

您的问题是新行\n。通过读取文本文件,每一行以\n结尾。因此,您的text=line变成text='Boy1\n',它是两行,并且未与Checkbutton文本对齐。

已删除,使用\n.strip()enter image description here


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()

0
投票

问题是文件中的行末尾有换行符,您可以使用字符串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()

结果:

screenshot of result

© www.soinside.com 2019 - 2024. All rights reserved.