【问题标题】:Scrollable buttons in tkintertkinter 中的可滚动按钮
【发布时间】:2021-10-23 05:27:31
【问题描述】:

我已经在 python tkinter 中编写了这段代码,但我想添加 垂直和水平滚动条,以便我可以垂直和水平滚动按钮。 我只想要一个简单的,以便作为初学者我可以彻底理解它。任何帮助表示赞赏。

from tkinter import *

root = Tk()

root.geometry("555x350")

b = Button(root, text="Sample button 1")
b.place(x=0, y=0)

b = Button(root, text="Sample button 1")
b.place(x=0, y=30)

b = Button(root, text="Sample button 1")
b.place(x=0, y=90)


b = Button(root, text="Sample button 1")
b.place(x=0, y=160)


b = Button(root, text="Sample button 1")
b.place(x=0, y=334)

b = Button(root, text="Sample button 1")
b.place(x=120, y=0)


b = Button(root, text="Sample button 1")
b.place(x=230, y=0)


b = Button(root, text="Sample button 1")
b.place(x=472, y=0)

root.mainloop()

【问题讨论】:

  • 将按钮放在一个像this这样的框架中。另外我建议使用.pack.grid 而不是.place
  • 我试过这样做,但我无法使框架可滚动。
  • 为什么不起作用?有两种方法可以在 tkinter 中进行滚动,在 Canvas 中使用 Frame(就像我发布的链接一样)是更简单的方法(在我看来)。
  • 好的,我会期待它,稍后会告诉它是否有效。
  • 请看一些基本的python教程,确保你没有落入this的陷阱。另请注意,使多个小部件可滚动(如您需要的那样)不是基础知识的一部分。

标签: tkinter button scrollbar


【解决方案1】:

tkinter 不支持在框架内滚动小部件。唯一可垂直滚动的小部件是 TextCanvasListboxttk.Treeview 小部件。

由于您使用place 作为按钮,因此您可以将按钮添加到画布,因为您可以将小部件定位在精确的坐标处。我已经在这个锅的末尾展示了一个例子。

如果您更喜欢使用gridpack 进行排列,请参阅Adding a scrollbar to a group of widgets in Tkinter,它展示了如何将按钮放入框架中,将框架放入画布中,然后将框架滚动为画布的一部分.

如果您想通过将小部件直接添加到画布来将它们放置在特定坐标处,请按照以下步骤操作。

from tkinter import *

root = Tk()

root.geometry("555x350")

canvas = Canvas(root)
vsb = Scrollbar(root, orient="vertical", command=canvas.yview)
hsb = Scrollbar(root, orient="horizontal", command=canvas.xview)

root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
canvas.configure(xscrollcommand=hsb.set, yscrollcommand=vsb.set)
canvas.grid(row=0, column=0, sticky="nsew")
vsb.grid(row=0, column=1, sticky="ns")
hsb.grid(row=1, column=0, sticky="ew")

b1 = Button(canvas, text="Sample button 1")
b2 = Button(canvas, text="Sample button 1")
b3 = Button(canvas, text="Sample button 1")
b4 = Button(canvas, text="Sample button 1")
b5 = Button(canvas, text="Sample button 1")
b6 = Button(canvas, text="Sample button 1")
b7 = Button(canvas, text="Sample button 1")
b8 = Button(canvas, text="Sample button 1")

canvas.create_window(0, 0, anchor="nw", window=b1)
canvas.create_window(0, 30, anchor="nw", window=b2)
canvas.create_window(0, 90, anchor="nw", window=b3)
canvas.create_window(0, 160, anchor="nw", window=b4)
canvas.create_window(0, 334, anchor="nw", window=b5)
canvas.create_window(120, 0, anchor="nw", window=b6)
canvas.create_window(230, 0, anchor="nw", window=b7)
canvas.create_window(472, 0, anchor="nw", window=b8)

canvas.bind("<Configure>", lambda event: canvas.configure(scrollregion=canvas.bbox("all")))

root.mainloop()

【讨论】:

  • 感谢 Bryan Oakly 的帮助,但我需要一个更简单的代码,因为作为初学者,我无法理解一些具体的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
  • 2014-07-12
  • 1970-01-01
  • 1970-01-01
  • 2019-04-24
  • 1970-01-01
相关资源
最近更新 更多