显示滚动条 canvas 但不向下滚动。选项卡和框架冲突?我该如何解决?
Scrollbar canvas is displayed but does not scroll down. Conflict of tabs and frames? How do I resolve?
为什么滚动条没有向下移动到组合框所在的选项卡 X(在 Tab1 中)?显示滚动条,但它不会下降。没有错误。
另一方面,如果我将 scrollable_frame 设置为组合框(我认为你应该这样做),组合框会消失并且不会显示
我做错了什么?代码中还有什么要修复的吗?你能告诉我代码吗? (有评论我可能看不懂)谢谢
我指定我使用 Canvas 并且我想使用 tkinter 小部件
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("Tab Widget")
root.attributes('-zoomed', True)
tabControl = ttk.Notebook(root, style='Custom.TNotebook', width=400, height=220)
tab1 = ttk.Notebook(tabControl)
tab2 = ttk.Notebook(tabControl)
tabControl.add(tab1, text ='Tab 1')
tabControl.add(tab2, text ='Tab 2')
tabControl.place(x=1, y=1)
#tab 1
a = ttk.Frame(tab1)
canvas = tk.Canvas(a)
scrollbar = ttk.Scrollbar(a, orient="vertical", command=canvas.yview)
scrollable_frame = ttk.Frame(canvas)
scrollable_frame.bind(
"<Configure>",
lambda e: canvas.configure(
scrollregion=canvas.bbox("all")
)
)
canvas.create_window((0, 0), window=scrollable_frame, anchor="nw")
canvas.configure(yscrollcommand=scrollbar.set)
combo1=ttk.Combobox(a, width = 18)
combo1.place(x=20, y=20)
combo1['value'] = ["text1", "text2"]
combo2=ttk.Combobox(a, width = 18)
combo2.place(x=20, y=80)
combo2['value'] = ["text1", "text2"]
combo3=ttk.Combobox(a, width = 18)
combo3.place(x=20, y=140)
combo3['value'] = ["text1", "text2"]
combo4=ttk.Combobox(a, width = 18)
combo4.place(x=20, y=200)
combo4['value'] = ["text1", "text2"]
a.pack()
canvas.pack(side="left", fill="both", expand=True)
scrollbar.pack(side="right", fill="y")
b = ttk.Frame(tab1)
tab1.add(a, text="X")
tab1.add(b, text="Y")
#tab 2
c = ttk.Frame(tab2)
d = ttk.Frame(tab2)
root.mainloop()
在您编写的代码中,组合框的容器小部件是a
。在这种情况下,显示了组合框,但滚动条不起作用,因为滚动条链接到 scrollable_frame
,而不是 a
。
现在,即使您将容器小部件更改为 scrollable_frame
,它仍然不起作用,因为您没有为 scrollable_frame
提供 width
和 height
.因此,scrollable_frame
显示为一个点。 (我通过将其更改为 tk.Frame
然后给出 bg = "blue"
来解决这个问题。框架显示为蓝点。)
此外,请记住,您需要为 height
提供一个大于 canvas
中可用高度的值,才能使滚动条正常工作。
工作代码:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("Tab Widget")
#root.attributes('-zoomed', True)
tabControl = ttk.Notebook(root, style='Custom.TNotebook', width=400, height=220)
tab1 = ttk.Notebook(tabControl)
tab2 = ttk.Notebook(tabControl)
tabControl.add(tab1, text ='Tab 1')
tabControl.add(tab2, text ='Tab 2')
tabControl.place(x=1, y=1)
#tab 1
a = ttk.Frame(tab1)
canvas = tk.Canvas(a)
scrollbar = ttk.Scrollbar(a, orient="vertical", command=canvas.yview)
scrollable_frame = ttk.Frame(canvas, width = 500, height = 500)
scrollable_frame.bind(
"<Configure>",
lambda e: canvas.configure(
scrollregion=canvas.bbox("all")
)
)
canvas.create_window((0, 0), window=scrollable_frame, anchor="nw")
canvas.configure(yscrollcommand=scrollbar.set)
combo1=ttk.Combobox(scrollable_frame, width = 18)
combo1.place(x=20, y=20)
combo1['value'] = ["text1", "text2"]
combo2=ttk.Combobox(scrollable_frame, width = 18)
combo2.place(x=20, y=80)
combo2['value'] = ["text1", "text2"]
combo3=ttk.Combobox(scrollable_frame, width = 18)
combo3.place(x=20, y=140)
combo3['value'] = ["text1", "text2"]
combo4=ttk.Combobox(scrollable_frame, width = 18)
combo4.place(x=20, y=200)
combo4['value'] = ["text1", "text2"]
a.pack()
canvas.pack(side="left", fill="both", expand=True)
scrollbar.pack(side="right", fill="y")
b = ttk.Frame(tab1)
tab1.add(a, text="X")
tab1.add(b, text="Y")
#tab 2
c = ttk.Frame(tab2)
d = ttk.Frame(tab2)
root.mainloop()
为什么滚动条没有向下移动到组合框所在的选项卡 X(在 Tab1 中)?显示滚动条,但它不会下降。没有错误。
另一方面,如果我将 scrollable_frame 设置为组合框(我认为你应该这样做),组合框会消失并且不会显示
我做错了什么?代码中还有什么要修复的吗?你能告诉我代码吗? (有评论我可能看不懂)谢谢
我指定我使用 Canvas 并且我想使用 tkinter 小部件
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("Tab Widget")
root.attributes('-zoomed', True)
tabControl = ttk.Notebook(root, style='Custom.TNotebook', width=400, height=220)
tab1 = ttk.Notebook(tabControl)
tab2 = ttk.Notebook(tabControl)
tabControl.add(tab1, text ='Tab 1')
tabControl.add(tab2, text ='Tab 2')
tabControl.place(x=1, y=1)
#tab 1
a = ttk.Frame(tab1)
canvas = tk.Canvas(a)
scrollbar = ttk.Scrollbar(a, orient="vertical", command=canvas.yview)
scrollable_frame = ttk.Frame(canvas)
scrollable_frame.bind(
"<Configure>",
lambda e: canvas.configure(
scrollregion=canvas.bbox("all")
)
)
canvas.create_window((0, 0), window=scrollable_frame, anchor="nw")
canvas.configure(yscrollcommand=scrollbar.set)
combo1=ttk.Combobox(a, width = 18)
combo1.place(x=20, y=20)
combo1['value'] = ["text1", "text2"]
combo2=ttk.Combobox(a, width = 18)
combo2.place(x=20, y=80)
combo2['value'] = ["text1", "text2"]
combo3=ttk.Combobox(a, width = 18)
combo3.place(x=20, y=140)
combo3['value'] = ["text1", "text2"]
combo4=ttk.Combobox(a, width = 18)
combo4.place(x=20, y=200)
combo4['value'] = ["text1", "text2"]
a.pack()
canvas.pack(side="left", fill="both", expand=True)
scrollbar.pack(side="right", fill="y")
b = ttk.Frame(tab1)
tab1.add(a, text="X")
tab1.add(b, text="Y")
#tab 2
c = ttk.Frame(tab2)
d = ttk.Frame(tab2)
root.mainloop()
在您编写的代码中,组合框的容器小部件是a
。在这种情况下,显示了组合框,但滚动条不起作用,因为滚动条链接到 scrollable_frame
,而不是 a
。
现在,即使您将容器小部件更改为 scrollable_frame
,它仍然不起作用,因为您没有为 scrollable_frame
提供 width
和 height
.因此,scrollable_frame
显示为一个点。 (我通过将其更改为 tk.Frame
然后给出 bg = "blue"
来解决这个问题。框架显示为蓝点。)
此外,请记住,您需要为 height
提供一个大于 canvas
中可用高度的值,才能使滚动条正常工作。
工作代码:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("Tab Widget")
#root.attributes('-zoomed', True)
tabControl = ttk.Notebook(root, style='Custom.TNotebook', width=400, height=220)
tab1 = ttk.Notebook(tabControl)
tab2 = ttk.Notebook(tabControl)
tabControl.add(tab1, text ='Tab 1')
tabControl.add(tab2, text ='Tab 2')
tabControl.place(x=1, y=1)
#tab 1
a = ttk.Frame(tab1)
canvas = tk.Canvas(a)
scrollbar = ttk.Scrollbar(a, orient="vertical", command=canvas.yview)
scrollable_frame = ttk.Frame(canvas, width = 500, height = 500)
scrollable_frame.bind(
"<Configure>",
lambda e: canvas.configure(
scrollregion=canvas.bbox("all")
)
)
canvas.create_window((0, 0), window=scrollable_frame, anchor="nw")
canvas.configure(yscrollcommand=scrollbar.set)
combo1=ttk.Combobox(scrollable_frame, width = 18)
combo1.place(x=20, y=20)
combo1['value'] = ["text1", "text2"]
combo2=ttk.Combobox(scrollable_frame, width = 18)
combo2.place(x=20, y=80)
combo2['value'] = ["text1", "text2"]
combo3=ttk.Combobox(scrollable_frame, width = 18)
combo3.place(x=20, y=140)
combo3['value'] = ["text1", "text2"]
combo4=ttk.Combobox(scrollable_frame, width = 18)
combo4.place(x=20, y=200)
combo4['value'] = ["text1", "text2"]
a.pack()
canvas.pack(side="left", fill="both", expand=True)
scrollbar.pack(side="right", fill="y")
b = ttk.Frame(tab1)
tab1.add(a, text="X")
tab1.add(b, text="Y")
#tab 2
c = ttk.Frame(tab2)
d = ttk.Frame(tab2)
root.mainloop()