メインフレーム内のフレームまたはキャンバス内に設定したい動的な追加および削除可能な入力フィールドがあります。フレームが消えるか、入力フィールドで動的に拡大します。入力フィールドがウィンドウのサイズを超えた場合、キャンバスにスクロールバーを使用させたいどのように動的に追加された項目フィールドを、サイズ変更されていないセットフレームまたはキャンバスに配置するのですか?
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()
これは、私のボタンが追加され、削除される場所です。
def addBox(self):
def delete():
delboxButton.grid_remove()
ent1.delete(0,END)
ent2.delete(0,END)
ent1.grid_remove()
ent2.grid_remove()
root = self.frame
frame=Frame(root,width=900,height=900)
frame.pack()
canvas=Canvas(frame,bg='#FFFFFF',width=700,height=300,scrollregion=(0,0,700,300))
vbar=Scrollbar(frame,orient=VERTICAL)
vbar.pack(side=RIGHT,fill=Y)
vbar.config(command=canvas.yview)
canvas.config(width=700,height=300)
canvas.config(yscrollcommand=vbar.set)
canvas.pack(side=LEFT,expand=TRUE,fill=BOTH)
私は最初にエントリの最初のセットを開くときに画面上で開始する方法を理解しようとしています。追加呼び出しをアクションにバインドします。
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()
なぜ "ボックス"ごとに新しいキャンバスを作成していますか?また、キャンバスは 'create_window'で作成したものだけをスクロールすることができるので、' pack'でフレームを追加するとそのフレームはスクロールできません。 –
エントリごとに新しいキャンバスを作成したくありません。 thats私はここで正しい方向にポイントを求める私は今なぜcreate_windowしようとしているが、私は削除をクリックしてもフィールドを削除しません。 @brianOakley – Brandon
私はあなたと一緒にウィンドウを作成し、それらを追加しますが、それはもう一方の上にそれらを積み重ねます。私はi = 10を使って試してみましたが、i + = 20は20を使っていました。行数に必要な量は追加されません。 – Brandon