【问题标题】:tkinter pack vs grid methods: Scrollbar appearancestkinter pack 与网格方法:滚动条外观
【发布时间】:2020-03-04 17:17:24
【问题描述】:

下面显示了 Tk 窗口的右下角,该窗口由一个框架组成,该框架由一个画布和水平和垂直滚动条组成。这是使用 Grid 方法实现的。

我无法使用 Pack 方法复制相同的外观。下面是我得到的和给出这样外观的示例代码。

如何使用 pack 方法通过 grid 方法复制外观?

import tkinter as tk
import tkinter.ttk as ttk

root = tk.Tk()
frame = ttk.Frame( root )
frame.pack()

ysb = ttk.Scrollbar( frame, orient='vertical' )
xsb = ttk.Scrollbar( frame, orient='horizontal' )

canvas = tk.Canvas( frame, width=1000, height=700, background='green')
canvas.create_rectangle( 100, 100, 900, 600, fill='yellow' )
canvas.configure( scrollregion=canvas.bbox(tk.ALL),
                  xscrollcommand=xsb.set,
                  yscrollcommand=ysb.set )

xsb.config( command=canvas.xview )
ysb.config( command=canvas.yview )

ysb.pack( side='right', fill='y', expand=1)
xsb.pack( side='bottom', fill='x', expand=1 )
canvas.pack( side='left', fill='both', expand=1 )

#ysb.grid( row=0, column=1, sticky='ns' )
#xsb.grid( row=1, column=0, sticky='ew' )
#canvas.grid( row=0, column=0, sticky='nsew' )

【问题讨论】:

  • 如果你可以用grid做你想做的事,为什么你需要使用pack的解决方案?
  • @BryanOakley 实际代码具有由 Pack 方法定位的小部件。在我的示例中使用网格方法来显示所需的结果,而pack 没有得到。 @acw1668 解决方案帮助我更好地理解了 pack 方法。
  • 您的实际代码是否使用pack 并不重要。您可以创建一个框架并使用pack 将其放置,并使用grid 将滚动条和画布放置在框架中。
  • 抱歉没有解释清楚。实际代码有一个已经打包好的画布。我无法将grid 方法与现有的pack 方法结合使用。
  • @SunBear 实际上,您的代码已将画布和两个滚动条放在一个框架内 (frame),因此您可以在该框架内使用 grid() 来布局画布和两个滚动条(如果有)是同一帧中没有其他小部件。然后,您可以在框架上使用pack() 以及其他属于root 子级的小部件。您不能在 same 容器中混用 pack()grid()frame 是一个容器,root 是另一个容器。所以在frame 中使用grid() 与在root 中使用pack() 不会冲突。

标签: python tkinter scrollbar


【解决方案1】:

你可以使用pady来实现它:

h = xsb.winfo_reqheight() # get the height of horizontal scrollbar
ysb.pack(side='right', fill='y', pady=(0,h)) # set bottom pady

【讨论】:

    猜你喜欢
    • 2019-11-23
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2015-04-07
    相关资源
    最近更新 更多