[英]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.