如何将动态添加的条目字段放在不调整大小的集合帧或画布中

2024-09-29 00:22:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有可动态添加和删除的输入字段,我想在主框架内的框架或画布中设置,但当我尝试时,框架会随着输入字段的变化而消失或动态增长。如果输入字段超过窗口大小,我希望画布使用滚动条。在

from tkinter import *
import tkinter as tk
class Demo2:
    def __init__(self, master):
        global rows

    self.master = master      
    self.frame = tk.Frame(self.master)
    master.title("test")

    self.frame.pack()
    addboxButton = Button(self.frame, text='<Add Time Input>', fg="Red", command=self.addBox)
    addboxButton.pack()

这是我的按钮添加和删除的地方

^{pr2}$

我现在想弄清楚,当第一组条目打开时,如何在屏幕上启动。并将add调用绑定到一个操作

    i = 0
    ent1 = Entry(canvas)
    ent1.grid(row=i, column=0,sticky="nsew")
    i += 1
    i = 0
    ent2 = Entry(canvas)
    ent2.grid(row=i, column=1,sticky="nsew")
    i += 1        

    delboxButton = Button(canvas, text='delete', fg="Red", command=delete)
    delboxButton.grid(row=0 ,column=2)

root = tk.Tk()
root.title("test Complete")
root.geometry("500x500")
app = Demo2(root)
root.mainloop()

Tags: importselfmaster框架tkinter画布动态column
1条回答
网友
1楼 · 发布于 2024-09-29 00:22:49

通常的处理方法是创建一个单独的框架,并使用canvascreate_window方法将其添加到画布中。然后,您可以使用packplacegrid在框架中放入您想要的任何内容。在

有关该技术的描述,请参见Adding a scrollbar to a group of widgets in Tkinter

下面是一个示例,说明该技术如何适用于由按钮创建的小部件。我没有包含delete功能,也没有包含使所有内容都能正确调整大小以保持示例简短的功能,但是您似乎对如何使delete函数工作有一个非常好的想法,而且我不知道您想要什么样的调整大小行为。在

import tkinter as tk

class Demo2:
    def __init__(self, master):
        self.master = master
        self.entries = []

        self.canvas = tk.Canvas(master, width=400, height=200)
        self.vsb = tk.Scrollbar(master, orient="vertical", command=self.canvas.yview)
        self.canvas.configure(yscrollcommand=self.vsb.set)
        self.add_button = tk.Button(master, text="Add", command=self.add)
        self.container = tk.Frame()

        self.canvas.create_window(0, 0, anchor="nw", window=self.container)
        self.add_button.pack(side="top")
        self.vsb.pack(side="right", fill="y")
        self.canvas.pack(side="left", fill="both", expand=True)

        # start with 3 entry widgets
        self.add()
        self.add()
        self.add()

    def add(self):
        entry = tk.Entry(self.container)
        entry.pack(side="top", fill="x")
        self.canvas.configure(scrollregion=self.canvas.bbox("all"))

        self.entries.append(entry)

root = tk.Tk()
demo = Demo2(root)
root.mainloop()

相关问题 更多 >