所以我对tkinter真的很陌生,而我想要做的就是在tkinter框架中显示输出。由于不知道任何其他方式,我试图将标签设置为字符串(我想要显示的输出),然后将标签打包到一个框架上。这有点工作我唯一的问题是它的格式化方式。字符串应该如下所示:
无论如何要解决这个或更好的方法将字符串输出到tkinter而不是使用标签。 我用来获取字符串的函数看起来像这样(getPrettyString函数有这么多elif的原因是我可以根据需要更改每列的大小):
def getPrettyString(record):
string = ""
for i in range(len(record)):
if i == 0:
string += '{:<25}'.format(record[i])
elif i == 1:
string += '{:<25}'.format(record[i])
elif i == 2:
string += '{:<25}'.format(record[i])
elif i == 3:
string += '{:<25}'.format(record[i])
elif i == 4:
string += '{:<25}'.format(record[i])
elif i == 5:
string += '{:<25}'.format(record[i])
elif i == 6:
string += '{:<25}'.format(record[i])
elif i == 7:
string += '{:<25}'.format(record[i])
return string
def writeTable(table):
record = ''
header = ["ID", "Assignment Name", "Submission Date", "Time of submission", "Group Assignment", "Group comments",
"Assignment Text", "Marks"]
record += getPrettyString(header)
record += '\n'
for team in table:
record += getPrettyString(team)
record += '\n'
return record
我的tkinter代码如下所示:
class View_marks_student:
def __init__(self, master):
master.geometry('1080x1920')
master.title("Student Marks Page")
string = StringVar()
string.set(writeTable(table_details))
self.label = Label(master, textvariable=string, anchor=N, justify=LEFT)
self.label.pack(anchor=NW, fill=BOTH, expand=1)
任何帮助将不胜感激
答案 0 :(得分:1)
对于绘图表,使用.grid()
要简单得多,看起来要好得多。
请参阅下面的示例:
from tkinter import *
root = Tk()
header = ["ID", "Assignment Name", "Submission Date", "Time of submission", "Group Assignment", "Group comments", "Assignment Text", "Marks"]
for i in range(10):
Grid.rowconfigure(root, i, weight=1)
if i == 0:
for c in range(len(header)):
Grid.columnconfigure(root, c, weight=1)
Label(root, text=header[c], borderwidth=1, relief="solid").grid(column=c, row=i, sticky=N+S+E+W)
else:
for c in range(len(header)):
Grid.columnconfigure(root, c, weight=1)
Label(root, text=header[c]+" Row:"+str(i)+", Col:"+str(c), borderwidth=1, relief="solid").grid(column=c, row=i, sticky=N+S+E+W)
因此,我们创建了第一个for
循环来表示表的行,i
的每个增量递增到表的下一行。然后,我们为表的每一行(for
的增量)创建一个嵌套的i
循环,表示特定行的每一列中的每个单元格。
所以我们从头开始,访问行“0”,然后我们遍历标题列表,打印我们所在行的每一列中的每个单元格值,然后继续前进到下一行。
我们还使用rowconfigure
和columnconfigure
等一些奇特的操作来将每行和每列的weight
设置为1
,这意味着单元格将展开以填充分配给他们的可用空间,并通过制作每个label
我们在所有方向(sticky
)创建N+S+E+W
,边框将展开以适应指定的空间。
如果您有一组要输入到表中的数据,那么您可以创建一个list of
列表并指定输出的数据,其中第一个迭代值是行,第二个是列。
所以这个:
for c in range(len(header)):
Grid.columnconfigure(root, c, weight=1)
Label(root, text=header[c]+" Row:"+str(i)+", Col:"+str(c), borderwidth=1, relief="solid").grid(column=c, row=i, sticky=N+S+E+W)
会成为这个(data
是list
list
的{{1}}:
for c in range(len(header)):
Grid.columnconfigure(root, c, weight=1)
Label(root, text=data[i][c]+" Row:"+str(i)+", Col:"+str(c), borderwidth=1, relief="solid").grid(column=c, row=i, sticky=N+S+E+W)