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