简体   繁体   English

Tkinter 滚动条未显示在第二帧中

[英]Tkinter Scrollbar Not Showing in Second Frame

I am trying to resolve an error in which I create a second frame within Tkinter with a group of labels and entry boxes and I'm trying to implement a scrollbar for future use when I place many more labels and boxes but for some reason only the frame, boxes, and labels pop up - but no scrollbar.我正在尝试解决一个错误,在该错误中,我在 Tkinter 中创建了第二个框架,其中包含一组标签和输入框,并且我试图实现一个滚动条以供将来使用时放置更多标签和框,但由于某种原因,只有框架、框和标签弹出 - 但没有滚动条。 Here is the code so far:这是到目前为止的代码:

from tkinter import *
from tkinter import ttk


win = Tk()

# Creating Frames
wrapper1 = LabelFrame(win, width = 1500, height = 1000)
wrapper2 = LabelFrame(win, width = 1500, height = 1000)

mycanvas = Canvas(wrapper1)
mycanvas.pack(side = LEFT, fill = "both", expand ="yes")

myframe = Frame(mycanvas)
mycanvas.create_window((0,0), window = myframe, anchor = "nw")

wrapper1.pack(fill = "both", expand = "yes", padx = 10, pady = 10)

# Creating a Hide Frame Function
def hide_menu_frames():
    # Destroying the children widgets in each frame
    for widget in wrapper1.winfo_children():
        widget.destroy()
    for widget in wrapper2.winfo_children():
        widget.destroy()

    # Hiding all frames
    wrapper1.pack_forget()
    wrapper2.pack_forget()

def home():
    #hide_menu_frames()
    myframe.pack(fill = "both", expand = 1)
    start_label = Label(myframe, text = "Choose Length of Loan Model", font = ("Helvetica", 18)).pack(pady = 100)
    #start_label.grid(row = 0, column = 1, pady = 50)

    # Creating Buttons
    home_button1 = Button(myframe, text = "12 Month Model", bg='#ffffff', activeforeground='#4444ff', font = ("Helvetica", 15, BOLD), command = second_home).pack(pady = 10)


def second_home():
    hide_menu_frames()

    second_label = Label(wrapper2, text = "Please Input Loan Parameters", font = ("Helvetica", 18), pady = 10).pack()

    # Creating Input Box for Original Balance Month 1
    global og_bal_input
    og_bal_input = Entry(wrapper2)
    og_bal_input.pack()

    # Creating Label for Original Balance Month 1
    global og_bal_label
    og_bal_label = Label(wrapper2, text = "Enter Original Balance for Month 1")
    og_bal_label.pack()

    # Creating Input Box for Original Balance Month 2
    global og_bal_input2
    og_bal_input2 = Entry(wrapper2)
    og_bal_input2.pack()

    # Creating Label for Original Balance Month 2
    global og_bal_label2
    og_bal_label2 = Label(wrapper2, text = "Enter Original Balance for Month 2")
    og_bal_label2.pack()

    # Creating Input Box for Original Balance Month 3
    global og_bal_input3
    og_bal_input3 = Entry(wrapper2)
    og_bal_input3.pack()

    # Creating Label for Original Balance Month 3
    global og_bal_label3
    og_bal_label3 = Label(wrapper2, text = "Enter Original Balance for Month 3")
    og_bal_label3.pack()

    mycanvas = Canvas(wrapper2)
    
    mycanvas.pack(side = LEFT, fill = "both", expand ="yes")

    yscrollbar = ttk.Scrollbar(wrapper2, orient = VERTICAL, command = mycanvas.yview)
    
    yscrollbar.pack(side = RIGHT, fill = "y")
    
    mycanvas.configure(yscrollcommand = yscrollbar.set)
    
    mycanvas.bind('<Configure>',lambda e: mycanvas.configure(scrollregion = mycanvas.bbox('all')))

    wrapper2.pack(fill = "both", expand = "yes", padx = 10, pady = 10)

    myframe = Frame(mycanvas)
    mycanvas.create_window((0,0), window = myframe, anchor = "nw")

Everything works until I press the first button to get to the 'second home' - I can see the input boxes and labels but no scrollbar一切正常,直到我按下第一个按钮进入“第二个家” - 我可以看到输入框和标签,但没有滚动条

You haven't put the entries and labels inside myframe so they won't be in the scrolled canvas.您没有将条目和标签放在myframe中,因此它们不会出现在滚动的 canvas 中。 You need to rearrange your code so the canvas ( mycanvas ) and its frame ( myframe ) are created first, then make the entries and labels children of the frame in the canvas ( myframe ).您需要重新排列代码,以便首先创建 canvas ( mycanvas ) 及其框架 ( myframe ),然后在 canvas ( myframe ) 中创建框架的条目和标签子项。 I've added a loop which demonstrates the scrolling, you can remove this.我添加了一个演示滚动的循环,您可以将其删除。

def second_home():
    hide_menu_frames()

    mycanvas = Canvas(wrapper2)
    
    mycanvas.pack(side = LEFT, fill = "both", expand ="yes")

    yscrollbar = ttk.Scrollbar(wrapper2, orient = VERTICAL, command = mycanvas.yview)
    
    yscrollbar.pack(side = RIGHT, fill = "y")
    
    mycanvas.configure(yscrollcommand = yscrollbar.set)
    
    mycanvas.bind('<Configure>',lambda e: mycanvas.configure(scrollregion = mycanvas.bbox('all')))

    wrapper2.pack(fill = "both", expand = "yes", padx = 10, pady = 10)

    myframe = Frame(mycanvas)
    mycanvas.create_window((0,0), window = myframe, anchor = "nw")

    second_label = Label(myframe, text = "Please Input Loan Parameters", font = ("Helvetica", 18), pady = 10).pack()

    # Creating Input Box for Original Balance Month 1
    global og_bal_input
    og_bal_input = Entry(myframe)
    og_bal_input.pack()

    # Creating Label for Original Balance Month 1
    global og_bal_label
    og_bal_label = Label(myframe, text = "Enter Original Balance for Month 1")
    og_bal_label.pack()

    # Creating Input Box for Original Balance Month 2
    global og_bal_input2
    og_bal_input2 = Entry(myframe)
    og_bal_input2.pack()

    # Creating Label for Original Balance Month 2
    global og_bal_label2
    og_bal_label2 = Label(myframe, text = "Enter Original Balance for Month 2")
    og_bal_label2.pack()

    # Creating Input Box for Original Balance Month 3
    global og_bal_input3
    og_bal_input3 = Entry(myframe)
    og_bal_input3.pack()

    # Creating Label for Original Balance Month 3
    global og_bal_label3
    og_bal_label3 = Label(myframe, text = "Enter Original Balance for Month 3")
    og_bal_label3.pack()

    for i in range(100):
        Label(myframe, text = "test scroll " + str(i)).pack()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM