首页 > 解决方案 > 如何制作表格并在其中引入另一个文件中的数据?另外我怎么能移动整个桌子?

问题描述

所以我的想法是我有一个按钮,可以创建一个表格并在每列中引入来自向量(或列表?位于另一个文件中)的数据。

这是一个代码示例:

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

标签: pythontkinter

解决方案


如果你把整个桌子放在一个框架里,你就可以移动它。我建议子类化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()

推荐阅读