为了账号安全,请及时绑定邮箱和手机立即绑定

Tkinter - 当框架内的标签数量发生变化时,滚动条不会调整大小

Tkinter - 当框架内的标签数量发生变化时,滚动条不会调整大小

茅侃侃 2023-10-26 14:29:35
我正在尝试创建一个 GUI,其中左侧是一个Listbox(包含在框架内f2),显示员工 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 Framesf1 = 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)
查看完整描述

1 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

当您将小部件添加到框架时,您的画布不会触发配置事件。相反,你的框架被触发了。

所以你需要添加这一行:

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

创建后second_frame


查看完整回答
反对 回复 2023-10-26
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信