【问题标题】:Python tkinker resitze CanvasPython tkinter 调整画布大小
【发布时间】:2021-07-21 11:31:59
【问题描述】:

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

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,110,style=tk.PIESLICE,width=4,start=0,extent=300)
    master.mainloop() 
    
global caninfo
caninfo = [385,250]

if __name__ == "__main__":
    gui()   

【问题讨论】:

    标签: python tkinter scrollview tkinter-canvas


    【解决方案1】:

    无需调整画布区域大小

    写了一个额外的函数

    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

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2014-05-15
      • 1970-01-01
      • 2020-11-22
      • 2021-08-24
      • 2021-04-28
      • 2022-01-15
      相关资源
      最近更新 更多