【问题标题】:scrollbar in Top level canvas顶级画布中的滚动条
【发布时间】:2019-05-27 03:32:02
【问题描述】:

为画布创建的顶级窗口中的滚动条不起作用,我如何获取画布区域。画布大小随其中的按钮数量而变化

我在 tk(root) 中创建了框架,并且框架中的一个小部件创建了顶级窗口,该窗口在一个框架中有多个按钮。按钮数量随列表而异。该框架(其中有按钮)存在于画布中。我的问题是放置滚动小部件画布后不要移动

from tkinter import *
root = Tk()
root.geometry("500x200")
my_app= Frame(root)
my_app.pack()
my_window = Toplevel(my_app, bg='brown')
my_window.geometry("500x200+300+500")

top_window = Frame(my_window, bd=2, relief=SUNKEN)
top_window.grid_columnconfigure(0, weight=1)

yscrollbar = Scrollbar(top_window)
yscrollbar.grid(row=0, column=1, sticky=N+S)

canvas = Canvas(top_window, bd=0, yscrollcommand=yscrollbar.set)
canvas.config(scrollregion=(0, 0, 500, 1000))
canvas.grid(row=0, column=0, sticky=N+S+E+W)

yscrollbar.config( command = canvas.yview)
top_window.pack()
my_f = Frame(canvas)
def ins_ind(m):
    print(m)

results = 
["one","two","three","four","five","six","seven","eight","nine","ten"]
ins_list=[]

for ind, result in enumerate(results):
    ins=str(result)
    ins_list.append(ind)
    ins_list[ind] = Button(my_f, text = ins, font='Times 12 bold', 
        bg='sandy brown',anchor=E, fg="black", command = lambda m=ins: 
    ins_ind(m) )
    ins_list[ind].pack()
my_f.pack()
root.mainloop()

滚动条不动

【问题讨论】:

  • Scrollbar 究竟应该滚动什么——只是画布?

标签: python tkinter tkinter-canvas


【解决方案1】:

要让按钮在您滚动画布时移动,您必须将按钮放在画布上。

您的代码将按钮放在框架my_f 上。要将按钮放在画布上,您应该使用:canvas.create_window(x, y, window=button)

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 2015-02-08
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多