Python tkinker 调整画布

我有一个 Python3 Tkinter 程序。我在主窗口中有 3 个框架,在一个框架中有一个带有滚动选项的画布 - 现在我想重新设置画布区域。 现在,如果我调整大小,它将 Y 的滚动条移出窗口,x 的滚动条也不会按预期工作(变大但滑动区域不会改变) 我如何管理它以在网格布局中调整画布的大小 - 窗口必须具有相同的大小,必须更新 Scrollbas 并且画布平面必须更大。 摘自我的代码:

import tkinter as tk

def menu_build():
    caninfo[0] += 10
    cangui.configure(width = caninfo[0])
    #cangui.configure(scrollregion=cangui.bbox("all"))

def gui():
    master = tk.Tk()
    master.title( "Easy Switch" )
    master.geometry("480x320")
    frametop = tk.Frame(master,bg="blue",bd=2)
    frametop.grid(column=0,row=0)
    frameex = tk.Frame(master,bg="yellow",bd=2)
    frameex.grid(column=1,row=1)
    framegui = tk.Frame(master,bg="red",bd=2)
    framegui.grid(column=0,columnspan=2,row=1)
    
    menu = tk.Menu(master)
    master.config(menu=menu)
    filemenu = tk.Menu(menu)
    menu.add_cascade(label="Config",menu=filemenu)
    filemenu.add_command(label="Resize",command=menu_build)
    global cangui
    cangui = tk.Canvas(framegui,width=385,height=250)
    #caninfo = [385,250]
    cangui.grid(row=1,column=2)
    scroll_x = tk.Scrollbar(framegui,orient="horizontal",command=cangui.xview)
    scroll_x.grid(row=2,column=2,sticky="ew")
    scroll_y = tk.Scrollbar(framegui,orient="vertical",command=cangui.yview)
    scroll_y.grid(row=1,column=3,sticky="ns")
    cangui.configure(yscrollcommand=scroll_y.set,xscrollcommand=scroll_x.set)
    cangui.configure(scrollregion=cangui.bbox("all"))
    cwcb = tk.Checkbutton(framegui,text="ccw").grid(row=2,column=0)
    
    cangui.create_arc(90,90,110,style=tk.PIESLICE,width=4,start=0,extent=300)
    master.mainloop() 
    
global caninfo
caninfo = [385,250]

if __name__ == "__main__":
    gui()   
zhangyeah19887 回答:Python tkinker 调整画布

无需调整画布区域的大小

写了一个额外的功能

win = [int(cangui.cget("width")),int(cangui.cget("height"))]
    draw_xy = cangui.bbox("all")
    swin = (min(0,draw_xy[0]),min(0,draw_xy[1]),max(draw_xy[2],win[0]),max(draw_xy[3],win[1]))
    cangui.configure(scrollregion=swin)

原因:canvas.bbox("all") 只给出最上/左图的位置,我想要 0/0

本文链接:https://www.f2er.com/60633.html

大家都在问