【发布时间】:2021-01-03 22:40:50
【问题描述】:
我正在使用 Tkinter 构建一个简单的 UI,但在添加滚动条时遇到了问题。我的 UI 布局(如下所示)由 5 个框架组成,其中一个框架有 3 个子框架。我正在尝试为每个框架和子框架添加滚动条,但是当我将最后一个滚动条添加到子框架时,所有框架都变得小于它们的指定大小。这仅在添加最终滚动条时发生。
代码:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry("900x600")
notebook = ttk.Notebook(root)
frame1 = tk.Frame(root, width = 900, height = 600)
frame2 = tk.Frame(root, width = 900, height = 600)
frame3 = tk.Frame(root, width = 900, height = 600)
frame4 = tk.Frame(root, width = 900, height = 600)
frame5 = tk.Frame(root, width = 900, height = 600)
notebook.add(frame1, text = 'Frame 1')
notebook.add(frame2, text = 'Frame 2')
notebook.add(frame3, text = 'Frame 3')
notebook.add(frame4, text = 'Frame 4')
notebook.add(frame5, text = 'Frame 5')
canvas2 = tk.Canvas(frame2, width = 900, height = 600, scrollregion = (0, 0, 900, 600))
canvas3 = tk.Canvas(frame3, width = 900, height = 600, scrollregion = (0, 0, 900, 600))
canvas4 = tk.Canvas(frame4, width = 900, height = 600, scrollregion = (0, 0, 900, 600))
canvas5 = tk.Canvas(frame5, width = 900, height = 600, scrollregion = (0, 0, 900, 600))
canvas2.pack(side = tk.LEFT, fill = tk.BOTH, expand = 1)
canvas3.pack(side = tk.LEFT, fill = tk.BOTH, expand = 1)
canvas4.pack(side = tk.LEFT, fill = tk.BOTH, expand = 1)
canvas5.pack(side = tk.LEFT, fill = tk.BOTH, expand = 1)
et_vbar2 =tk.Scrollbar(canvas2, orient = tk.VERTICAL)
et_vbar2.pack(side = tk.RIGHT, fill = tk.Y)
et_vbar2.config(command=canvas2.yview)
canvas2.config(yscrollcommand = et_vbar2.set)
et_hbar2 =tk.Scrollbar(canvas2, orient = tk.HORIZONTAL)
et_hbar2.pack(side = tk.BOTTOM, fill = tk.X)
et_hbar2.config(command=canvas2.xview)
canvas2.config(xscrollcommand = et_hbar2.set)
et_vbar3 =tk.Scrollbar(canvas3, orient = tk.VERTICAL)
et_vbar3.pack(side = tk.RIGHT, fill = tk.Y)
et_vbar3.config(command=canvas3.yview)
canvas3.config(yscrollcommand = et_vbar3.set)
et_hbar3 =tk.Scrollbar(canvas3, orient = tk.HORIZONTAL)
et_hbar3.pack(side = tk.BOTTOM, fill = tk.X)
et_hbar3.config(command=canvas3.xview)
canvas3.config(xscrollcommand = et_hbar3.set)
et_vbar4 =tk.Scrollbar(canvas4, orient = tk.VERTICAL)
et_vbar4.pack(side = tk.RIGHT, fill = tk.Y)
et_vbar4.config(command=canvas4.yview)
canvas4.config(yscrollcommand = et_vbar4.set)
et_hbar4 =tk.Scrollbar(canvas4, orient = tk.HORIZONTAL)
et_hbar4.pack(side = tk.BOTTOM, fill = tk.X)
et_hbar4.config(command=canvas4.xview)
canvas4.config(xscrollcommand = et_hbar4.set)
et_vbar5 =tk.Scrollbar(canvas5, orient = tk.VERTICAL)
et_vbar5.pack(side = tk.RIGHT, fill = tk.Y)
et_vbar5.config(command=canvas5.yview)
canvas5.config(yscrollcommand = et_vbar5.set)
et_hbar5 =tk.Scrollbar(canvas5, orient = tk.HORIZONTAL)
et_hbar5.pack(side = tk.BOTTOM, fill = tk.X)
et_hbar5.config(command=canvas5.xview)
canvas5.config(xscrollcommand = et_hbar5.set)
notebook.pack()
notebook2 = ttk.Notebook(frame1)
tab1 = tk.Frame(frame1, width = 900, height = 600)
tab2 = tk.Frame(frame1, width = 900, height = 600)
tab3 = tk.Frame(frame1, width = 900, height = 600)
notebook2.add(tab1, text= 'Tab 1')
notebook2.add(tab2, text = 'Tab 2')
notebook2.add(tab3, text = 'Tab 3')
subcanvas1 = tk.Canvas(tab1, width = 900, height = 600, scrollregion = (0, 0, 900, 600))
subcanvas2 = tk.Canvas(tab2, width = 900, height = 600, scrollregion = (0, 0, 900, 600))
subcanvas3 = tk.Canvas(tab3, width = 900, height = 600, scrollregion = (0, 0, 900, 600))
subcanvas1.pack(side = tk.LEFT, fill = tk.BOTH, expand = 1)
subcanvas2.pack(side = tk.LEFT, fill = tk.BOTH, expand = 1)
subcanvas3.pack(side = tk.LEFT, fill = tk.BOTH, expand = 1)
subet_vbar1 =tk.Scrollbar(subcanvas1, orient = tk.VERTICAL)
subet_vbar1.pack(side = tk.RIGHT, fill = tk.Y)
subet_vbar1.config(command=subcanvas1.yview)
subcanvas1.config(yscrollcommand = subet_vbar1.set)
subet_hbar1 =tk.Scrollbar(subcanvas1, orient = tk.HORIZONTAL)
subet_hbar1.pack(side = tk.BOTTOM, fill = tk.X)
subet_hbar1.config(command=subcanvas1.xview)
subcanvas1.config(xscrollcommand = subet_hbar1.set)
subet_vbar2 =tk.Scrollbar(subcanvas2, orient = tk.VERTICAL)
subet_vbar2.pack(side = tk.RIGHT, fill = tk.Y)
subet_vbar2.config(command=subcanvas2.yview)
subcanvas2.config(yscrollcommand = subet_vbar2.set)
subet_hbar2 =tk.Scrollbar(subcanvas2, orient = tk.HORIZONTAL)
subet_hbar2.pack(side = tk.BOTTOM, fill = tk.X)
subet_hbar2.config(command=subcanvas2.xview)
subcanvas2.config(xscrollcommand = subet_hbar2.set)
subet_vbar3 =tk.Scrollbar(subcanvas3, orient = tk.VERTICAL)
subet_vbar3.pack(side = tk.RIGHT, fill = tk.Y)
subet_vbar3.config(command=subcanvas3.yview)
subcanvas3.config(yscrollcommand = subet_vbar3.set)
subet_hbar3 =tk.Scrollbar(subcanvas3, orient = tk.HORIZONTAL)
subet_hbar3.pack(side = tk.BOTTOM, fill = tk.X)
subet_hbar3.config(command=subcanvas3.xview)
subcanvas3.config(xscrollcommand = subet_hbar3.set)
notebook2.pack()
root.mainloop()
有没有办法防止添加滚动条后每一帧都变小?
【问题讨论】:
-
一半的高度和宽度指定被忽略。您是否试图将所有内容都扩大到窗口的大小?
标签: python-3.x tkinter scrollbar