python - 如何制作表格并在其中引入另一个文件中的数据?另外我怎么能移动整个桌子?
问题描述
所以我的想法是我有一个按钮,可以创建一个表格并在每列中引入来自向量(或列表?位于另一个文件中)的数据。
这是一个代码示例:
from tkinter import *
root = Tk()
def x():
rows = []
for i in range(5):
cols = []
for j in range(4):
e = Entry(relief=GROOVE)
e.grid(row=i, column=j, sticky=NSEW)
e.insert(END, '%d.%d' % (i, j))
cols.append(e)
rows.append(cols)
create_b = Button(text="Create the table", bd=4, relief="groove", command=x)
create_b.place(x=50,y=10)
root.mainloop()
我怎样才能使表格不会删除按钮,而只是将表格放在按钮下方?另外,我怎样才能做到这一点,以便我可以像现在一样一次移动整个桌子.place(...)
?
解决方案
如果你把整个桌子放在一个框架里,你就可以移动它。我建议子类化tk.Frame
,以便您可以将其视为普通小部件。
我会这样做:首先,继承自Frame
. 然后,通过使所有小部件使用框架(自身)作为它们的父级来构造表格。完成此操作后,您可以像使用任何其他小部件一样使用表的实例。
在以下示例中,我使用我认为比您在示例中使用的更好的方式来导入 tkinter。除此之外,请注意它x
是如何CustomTable
像普通小部件一样使用的,并且您可以在创建表时将行数和列数作为参数传递。
import tkinter as tk
class CustomTable(tk.Frame):
def __init__(self, parent, rows=5, columns=5, **kwargs):
super().__init__(parent, **kwargs)
self.rows = []
for i in range(rows):
cols = []
for j in range(columns):
e = tk.Entry(self, relief=tk.GROOVE)
e.grid(row=i, column=j, sticky=tk.NSEW)
e.insert(tk.END, '%d.%d' % (i, j))
cols.append(e)
self.rows.append(cols)
def x():
table = CustomTable(root, rows=4, columns=3, bd=1, relief="raised")
table.place(x=50, y=50)
root = tk.Tk()
create_b = tk.Button(root, text="Create the table", bd=4, relief="groove", command=x)
create_b.place(x=50,y=10)
root.mainloop()
如果您不熟悉面向对象的编程,您可以使用函数获得相同的效果,尽管我认为面向对象的方法会导致代码更简洁。
import tkinter as tk
def create_table(parent, nrows=5, ncolumns=5, **kwargs):
global rows
frame = tk.Frame(parent, **kwargs)
rows = []
for i in range(nrows):
cols = []
for j in range(ncolumns):
e = tk.Entry(frame, relief=tk.GROOVE)
e.grid(row=i, column=j, sticky=tk.NSEW)
e.insert(tk.END, '%d.%d' % (i, j))
cols.append(e)
rows.append(cols)
return frame
def x():
table = create_table(root, bd=1, relief="raised")
table.place(x=50, y=50)
root = tk.Tk()
create_b = tk.Button(root, text="Create the table", bd=4, relief="groove", command=x)
create_b.place(x=50,y=10)
root.mainloop()
推荐阅读
- python-3.x - return 函数在下面的函数中做了什么?
- r - Debugging within a namespace
- javascript - Blazor - .NET 5:自动调整 iframe 大小
- python - 使用命名游标时,Psycopg2 中不允许使用带有 postgres 的“SELECT INTO”
- python - 网络旅行的负面影响?
- javascript - 有没有办法在添加数据之前获取firebase的firestore的自动生成的文档ID?
- c - 当你派生一个父进程时,活动子进程会发生什么,所有活动进程都会创建另一个进程吗?叉子();
- flutter - 在这种情况下如何在 Flutter 中调用函数“changeColor”?
- php - 未从选择字段中选择值
- machine-learning - 目标均值编码机器学习