Tkinter-框架内的标签数更改时,滚动条不会调整大小

拉克什·阿加瓦尔

我正在尝试创建一个GUI,其中左侧是一个Listboxf2显示在框内)显示雇员ID的信息,右侧是另一个框架second_frame(包含在画布和外部框内f3),以标签的形式显示每个选定员工的交易明细。

每个员工可以有多个事务。因此,标签的数量必须是动态的,即对于中的第一个选定项目listbox,可能有两个标签,而对于中的第二个选定项目listbox,它可能是一百个。对于每个选择,我都调用两个函数来销毁旧标签并创建新标签。虽然代码可以正常工作,但我无法根据所选listbox条目调整滚动条的大小我是Tkinter的新手,请告知。下面是我的代码。

还要注意,从任何函数外部调用时,test()函数都会显示滚动条,而从任何函数内部调用时,则不会显示任何内容。

# -*- coding: utf-8 -*-
from tkinter import *

'''def test():
    for i in range(0,50):
        for j in range (0,7):
            Label(second_frame, text=f'{i}{j}', width=20).grid(row=i, column=j, pady=5,padx=5)
'''
# --- function ---
def destroy_frame():
    #f1.grid_forget()
    print("destroying frame")
    for label in second_frame.winfo_children():
        label.destroy()

def create_frame(val):
    print("creating new frame")
    for i in range(0,val):
        for j in range (5):
            Label(second_frame, text=f'{i} {j} ', relief=GROOVE, width=10).grid(row=i, column=j, pady=5,padx=5)

def on_selection(event):
    # here you can get selected element
    print('previous:', listbox.get('active'))
    print(' current:', listbox.get(listbox.curselection()))

    # or using `event`
    print('(event) previous:', event.widget.get('active'))
    print('(event)  current:', event.widget.get(event.widget.curselection()))

    print (listbox.get(listbox.curselection()))

    if (listbox.get(listbox.curselection()) == "Eid 1"):
        destroy_frame()
        create_frame(100)

    elif (listbox.get(listbox.curselection()) == "Eid 2"):
        destroy_frame()
        create_frame(200)

    print('---')


root = Tk()
root.geometry('800x500')

#Create base Frames
f1 = Frame(width=800, height=50, bg="yellow", colormap="new")
f1.grid(row=0, columnspan=2)
f1.grid_propagate(False)

f2 = Frame(width=200, height=425, bg="light blue", colormap="new")
f2.grid(row=1, column=0)
f2.grid_propagate(False)

f3 = Frame(width=600, height=425, bg="light green", colormap="new")
f3.grid(row=1, column=1)
f3.grid_propagate(False)

#Create header Label
l1_f1 = Label(f1, text="Employee Purchase Entries:", bg="yellow")
l1_f1.grid(row=0, column=0)

#Create Listbox
listbox = Listbox(f2, bg="light blue", width=40, height=400)
listbox.grid(row=0, column=0)

#Add Scrollbar to ListBox
list_scrollbar = Scrollbar(f2)
list_scrollbar.grid(row=0, column=1, sticky=NSEW)

#Enter Listbox Data
listbox.insert(1, 'Eid 1')
listbox.insert(2, 'Eid 2')

listbox.bind('<<ListboxSelect>>', on_selection)

#configure the Listbox and Scrollbar
listbox.config(yscrollcommand  = list_scrollbar.set)
list_scrollbar.config(command = listbox.yview)

#Create a Canvas
my_canvas = Canvas(f3, width=580, height=425, bg="light green")
#my_canvas.pack(side=LEFT, fill=BOTH, expand=1)
my_canvas.grid(row=0, column=0)

#Add a Scrollbar to the canvas
my_scrollbar = Scrollbar(f3, orient=VERTICAL, command=my_canvas.yview)
my_scrollbar.grid(row=0, column=1, sticky=NSEW)

#configure the canvas
my_canvas.configure(yscrollcommand=my_scrollbar.set)
my_canvas.bind('<Configure>', lambda e : my_canvas.configure(scrollregion = my_canvas.bbox("all")))

#Create another frame inside the canvas
second_frame = Frame(my_canvas)

#Add the new frame to a window in the canvas
my_canvas.create_window((0,0), window=second_frame, anchor="nw")


#test()

root.mainloop()
阿特拉斯435

当您将小部件添加到框架时,画布不会触发configure事件。而是触发了您的帧。

所以你需要把这一行:

second_frame.bind('<Configure>', lambda e : my_canvas.configure(scrollregion = my_canvas.bbox("all")))

创建后 second_frame

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

画布上的Tkinter调整大小滚动条无法调整

来自分类Dev

画布上的Tkinter调整大小滚动条无法调整

来自分类Dev

tkinter调整窗口大小而滚动条不消失

来自分类Dev

框架内的 Tkinter 滚动条小部件

来自分类Dev

Tkinter修复框架的大小不与滚动条重叠画布边框

来自分类Dev

Tkinter修复框架的大小不与滚动条重叠画布边框

来自分类Dev

Tkinter怪异的滚动条

来自分类Dev

如何为画布大小更新Tkinter滚动条大小

来自分类Dev

带网格的Tkinter滚动条:滚动到框架上方,滚动条为灰色

来自分类Dev

在Tkinter中将滚动条拉伸到画布大小

来自分类Dev

Python Tkinter滚动条摇晃滚动

来自分类Dev

Tkinter滚动条不滚动

来自分类Dev

滚动条tkinter不滚动

来自分类Dev

Tkinter滚动条不滚动

来自分类Dev

Tkinter 滚动条不滚动

来自分类Dev

tkinter滚动条没有滚动条

来自分类Dev

控制Tkinter中滚动条的位置

来自分类Dev

Tkinter滚动条出现问题

来自分类Dev

类中的Python Tkinter滚动条

来自分类Dev

tkinter.Listbox滚动条yview

来自分类Dev

Python Tkinter滚动条问题

来自分类Dev

在Tkinter中控制滚动条的位置

来自分类Dev

滚动条进入python tkinter讨论

来自分类Dev

Tkinter滚动条不起作用

来自分类Dev

变量更改时,引用变量的 Tkinter 标签不会更新

来自分类Dev

Python Tkinter:调整框架大小的问题

来自分类Dev

Python Tkinter:调整框架大小的问题

来自分类Dev

如何在tkinter的框架中将滚动条附加到列表框?

来自分类Dev

无法在tkinter中将滚动条添加到文本小部件(其中包含多个框架)