gpt4 book ai didi

python - 如何在 tkinter 表 python 中对齐列标题

转载 作者:太空宇宙 更新时间:2023-11-03 14:44:09 25 4
gpt4 key购买 nike

我正在尝试组织标题,使它们与列对齐。下面是代码(创建表),但它没有按照我想要的方式工作。:

class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
names = ["header1", "header2", "header3", "header4"]
self.label1 = tk.Label(self, text=(" ".join(names)))
self.table = SimpleTableInput(self, 3, 4)
self.submit = tk.Button(self, text="Submit", command=self.on_submit)
self.label1.pack(side="top")
self.table.pack(side="top", fill="both", expand=True)
self.submit.pack(side="bottom")

我很感激任何建议!谢谢

整个脚本在这里:

import tkinter as tk

class SimpleTableInput(tk.Frame):
def __init__(self, parent, rows, columns):
tk.Frame.__init__(self, parent)

self._entry = {}
self.rows = rows
self.columns = columns

# register a command to use for validation
vcmd = (self.register(self._validate), "%P")
# create the table of widgets
for row in range(self.rows):
for column in range(self.columns):
index = (row, column)
e = tk.Entry(self, validate="key", validatecommand=vcmd)
e.grid(row=row, column=column, stick="nsew")
self._entry[index] = e
# adjust column weights so they all expand equally
for column in range(self.columns):
self.grid_columnconfigure(column, weight=1)
# designate a final, empty row to fill up any extra space
self.grid_rowconfigure(rows, weight=1)

def get(self):
'''Return a list of lists, containing the data in the table'''
result = []
for row in range(self.rows):
current_row = []
for column in range(self.columns):
index = (row, column)
current_row.append(self._entry[index].get())
result.append(current_row)
return result

def _validate(self, P):
'''Perform input validation.

Allow only an empty value, or a value that can be converted to a float
'''
if P.strip() == "":
return True

try:
f = float(P)
except ValueError:
self.bell()
return False
return True

class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
names = ["header1", "header2", "header3", "header4"]
self.label1 = tk.Label(self, text=(" ".join(names)))
self.table = SimpleTableInput(self, 3, 4)
self.submit = tk.Button(self, text="Submit", command=self.on_submit)
self.label1.pack(side="top")
self.table.pack(side="top", fill="both", expand=True)
self.submit.pack(side="bottom")

def on_submit(self):
print(self.table.get())

root = tk.Tk()
Example(root).pack(side="top", fill="both", expand=True)
root.mainloop()

最佳答案

我建议的方法是在顶部创建一个框架,并用分隔标签内的名称填充它。它允许对齐列并保持这种对齐方式,即使窗口已展开:

class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
names = ["header1", "header2", "header3", "header4"]
frame = tk.Frame(self)
frame.pack(side="top", fill="both", expand=True)
for i, title in enumerate(names):
l = tk.Label(frame, text=title)
l.grid(row=0, column=i)
frame.grid_columnconfigure(i, weight=1)
self.table = SimpleTableInput(self, 3, 4)
self.submit = tk.Button(self, text="Submit", command=self.on_submit)
self.table.pack(side="top", fill="both", expand=True)
self.submit.pack(side="bottom")

关于python - 如何在 tkinter 表 python 中对齐列标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46384103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com