Python 我制作了一个滚动条,但是我想要我的按钮响应。第二帧未按照窗口进行调整 从tkinter导入* root=Tk() #创建主框架 main=帧(根,bg='black') main.pack(填充=两者,扩展=1) #创建画布 mycanvas=Canvas(main,bg='red') mycanvas.pack(side=LEFT,fill=BOTH,expand=1) #在画布中添加滚动条 sroll=Scrollbar(main,orient=VERTICAL,command=mycanvas.yview) sroll.pack(侧面=右侧,填充=Y) #配置画布 配置(yscrollcommand=sroll.set) #在画布中创建另一个框架 秒=帧(mycanvas,bg='green') #将新框架添加到画布中的窗口 mycanvas.create_window((0,0),window=second,anchor='sw') def方法(事件): 配置(scrollregion=mycanvas.bbox(“全部”)) mycanvas.itemconfigure(秒,宽度=事件宽度,高度=事件高度) mycanvas.bind(“,方法) 根几何(“500x400”) 对于范围内的对象(100): b=按钮(第二个,text=“hellow”,宽度=30)。包装(侧面=顶部,填充=X,焊盘=30) root.mainloop()

Python 我制作了一个滚动条,但是我想要我的按钮响应。第二帧未按照窗口进行调整 从tkinter导入* root=Tk() #创建主框架 main=帧(根,bg='black') main.pack(填充=两者,扩展=1) #创建画布 mycanvas=Canvas(main,bg='red') mycanvas.pack(side=LEFT,fill=BOTH,expand=1) #在画布中添加滚动条 sroll=Scrollbar(main,orient=VERTICAL,command=mycanvas.yview) sroll.pack(侧面=右侧,填充=Y) #配置画布 配置(yscrollcommand=sroll.set) #在画布中创建另一个框架 秒=帧(mycanvas,bg='green') #将新框架添加到画布中的窗口 mycanvas.create_window((0,0),window=second,anchor='sw') def方法(事件): 配置(scrollregion=mycanvas.bbox(“全部”)) mycanvas.itemconfigure(秒,宽度=事件宽度,高度=事件高度) mycanvas.bind(“,方法) 根几何(“500x400”) 对于范围内的对象(100): b=按钮(第二个,text=“hellow”,宽度=30)。包装(侧面=顶部,填充=X,焊盘=30) root.mainloop(),python,python-3.x,tkinter,tkinter-canvas,Python,Python 3.x,Tkinter,Tkinter Canvas,代码中的一些问题: 在中使用anchor=“nw”。创建窗口(…) .itemconfigure()应应用于由.create\u window()创建的项目,而不是框架 当第二帧调整大小时更新scrollregion,而不是mycanvas 以下是代码中所需的更改: #使用了anchor=“nw”并添加了tag=“second” mycanvas.create_window((0,0),window=second,anchor='nw',tag=“second”) #用于更新滚动区域的回调

代码中的一些问题:

  • 中使用
    anchor=“nw”
    。创建窗口(…)
  • .itemconfigure()
    应应用于由
    .create\u window()
    创建的项目,而不是框架
  • 当第二帧调整大小时更新
    scrollregion
    ,而不是mycanvas
以下是代码中所需的更改:

#使用了anchor=“nw”并添加了tag=“second”
mycanvas.create_window((0,0),window=second,anchor='nw',tag=“second”)
#用于更新滚动区域的回调
def update_滚动区域(事件):
配置(scrollregion=mycanvas.bbox(“全部”))
#调整“mycanvas”大小时,用于调整“second”帧宽度的回调
def RESIGH_帧(事件):
#应应用于由create_window()创建的项目,而不是“第二个”框架
mycanvas.itemconfigure(“第二个”,宽度=事件宽度)
mycanvas.bind(“,resize_frame)#每当调整“mycanvas”的大小时,调整“second”帧的大小
second.bind(“,update_scrollregion)#更新/调整“second”帧时更新scrollregion

请查看帮助中心的部分,以获取有关如何改进问题的提示。一般来说,如果帖子的正文仅在标题中,而不在正文中,则不太容易理解。谢谢您的建议。。但是你能解决我的问题吗?嗨!如果你在正文部分更详细地解释这个问题,也许你可以改进你的帖子以获得答案。。。。多谢各位
from tkinter import *

root = Tk()

#createe a main frame
main=Frame(root,bg='black')
main.pack(fill=BOTH,expand=1)
#create a Canvas
mycanvas=Canvas(main,bg='red')
mycanvas.pack(side=LEFT,fill=BOTH,expand=1)

# add ascroll bar in canvas
sroll=Scrollbar(main,orient=VERTICAL,command=mycanvas.yview)
sroll.pack(side=RIGHT,fill=Y)

#configure the canvas
mycanvas.configure(yscrollcommand=sroll.set)

#create another frame in canvas
second=Frame(mycanvas,bg='green')
#add that new frame to the window in the canvas
mycanvas.create_window((0,0),window=second,anchor='sw')

def method(event):
    mycanvas.configure(scrollregion=mycanvas.bbox("all"))
    mycanvas.itemconfigure(second,width=event.width,height=event.height)

mycanvas.bind("<Configure>",method)

root.geometry("500x400")


for thing in range(100):
    b=Button(second,text="hellow",width=30).pack(side=TOP,fill=X,padx=30)

root.mainloop()