首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入滚动条时TKInter帧丢失网格布局

插入滚动条时TKInter帧丢失网格布局
EN

Stack Overflow用户
提问于 2022-11-30 13:02:20
回答 1查看 36关注 0票数 0

我试图创建一个有两个框架的应用程序,但我希望其中一个比另一个更宽.我找到了一种使用网格的方法,但是当我在其中一个框架上添加一个滚动条时,它会重新调整网格,这两个框架的大小相同。

这里是没有滚动条的代码:

代码语言:javascript
复制
def __init__(self, master=None):
    ctk.set_appearance_mode('system')
    ctk.set_default_color_theme('blue')

    self.__root = ctk.CTk() if master is None else ctk.CTkToplevel(master)
    self.__root. Configure(height=1500, width=944)
    self.__root.minsize(1500, 944)

    self.__main_container = ctk.CTkFrame(self.__root)

    self.__image_frame = ctk.CTkFrame(self.__main_container)
    self.__image_frame.configure(height=800, width=1000)

    self.__image_canvas = ctk.CTkCanvas(self.__image_frame)
    self.__image_canvas.configure(confine="true", cursor="crosshair")
    self.__image_canvas.grid(column=0, row=0, sticky="nsew")
    self.__image_canvas.bind("<ButtonPress-1>", self.__start_drawing)
    self.__image_canvas.bind("<ButtonRelease-1>", self.__end_drawing)
    self.__image_canvas.bind("<B1-Motion>", self.__draw_rectangle)

    self.__image_frame.grid(column=0, padx=10, pady=20, row=0, sticky="nsew")
    self.__image_frame.grid_propagate(0)
    self.__image_frame.grid_anchor("center")
    self.__image_frame.rowconfigure(0, weight=1)
    self.__image_frame.columnconfigure(0, weight=1)

    self.__boxes_frame = ctk.CTkFrame(self.__main_container)
    self.__boxes_frame.configure(height=800, width=400)
    self.__boxes_frame.grid(column=1, padx=10, pady=20, row=0, sticky="ns")

    self.__main_container.grid(column=0, padx=20, pady=40, row=0, sticky="ns")
    self.__main_container.grid_anchor("center")
    self.__main_container.rowconfigure(0, weight=1)

    self.__root.grid_anchor("center")
    self.__root.rowconfigure(0, weight=1)

    self.mainwindow = self.__root

当我添加滚动条并搅乱网格时,这就是代码

代码语言:javascript
复制
def __init__(self, master=None):
    ctk.set_appearance_mode('system')
    ctk.set_default_color_theme('blue')

    self.__root = ctk.CTk() if master is None else ctk.CTkToplevel(master)
    self.__root. Configure(height=1500, width=944)
    self.__root.minsize(1500, 944)

    self.__main_container = ctk.CTkFrame(self.__root)

    self.__image_frame = ctk.CTkFrame(self.__main_container)
    self.__image_frame.configure(height=800, width=1000)

    self.__image_canvas = ctk.CTkCanvas(self.__image_frame)
    self.__image_canvas.configure(confine="true", cursor="crosshair")
    self.__image_canvas.grid(column=0, row=0, sticky="nsew")
    self.__image_canvas.bind("<ButtonPress-1>", self.__start_drawing)
    self.__image_canvas.bind("<ButtonRelease-1>", self.__end_drawing)
    self.__image_canvas.bind("<B1-Motion>", self.__draw_rectangle)

    #------ adding the scrollbar -----
    self.__image_frame_vertical_scrollbar = ctk.CTkScrollbar(self.__image_frame, orientation="vertical")
    self.__image_frame_vertical_scrollbar.grid(column=1, row=0, sticky="ns")
    self.__image_frame_vertical_scrollbar.configure(command=self.__image_canvas.yview)
    self.__image_canvas.configure(yscrollcommand=self.__image_frame_vertical_scrollbar.set)
    #---------------------------------

    self.__image_frame.grid(column=0, padx=10, pady=20, row=0, sticky="nsew")
    self.__image_frame.grid_propagate(0)
    self.__image_frame.grid_anchor("center")
    self.__image_frame.rowconfigure(0, weight=1)
    self.__image_frame.columnconfigure(0, weight=1)

    self.__boxes_frame = ctk.CTkFrame(self.__main_container)
    self.__boxes_frame.configure(height=800, width=400)
    self.__boxes_frame.grid(column=1, padx=10, pady=20, row=0, sticky="ns")

    self.__main_container.grid(column=0, padx=20, pady=40, row=0, sticky="ns")
    self.__main_container.grid_anchor("center")
    self.__main_container.rowconfigure(0, weight=1)

    self.__root.grid_anchor("center")
    self.__root.rowconfigure(0, weight=1)

    self.mainwindow = self.__root

把事情搞砸的网格定义有什么问题?如何将__image_frame网格设置为它,以填充__main_container,保持所需的维度?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-30 16:52:25

显式设置画布的大小。

代码语言:javascript
复制
self.__image_canvas = ctk.CTkCanvas(self.__image_frame, width=900)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74628240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档