当前位置: 首页 > 知识库问答 >
问题:

Tkinter:如何让画布窗口中的框架扩展到画布的大小?

薛弘壮
2023-03-14

所以我一直在使用tkinter中的画布小部件来创建一个充满标签的框架,它有一个滚动条。除了框架只扩展到其中放置的标签的大小之外,一切都很好——我希望框架扩展到父画布的大小。

如果我对画布中的框架使用pack(expand=True)(我在下面的代码中已经注释掉了它),那么很容易做到这一点,但是滚动条不起作用。

以下是适当的代码位:

    ...
    self.canvas = Canvas(frame, bg = 'pink')
    self.canvas.pack(side = RIGHT, fill = BOTH, expand = True)

    self.mailbox_frame = Frame(self.canvas, bg = 'purple')

    self.canvas.create_window((0,0),window=self.mailbox_frame, anchor = NW)

    #self.mailbox_frame.pack(side = LEFT, fill = BOTH, expand = True)

    mail_scroll = Scrollbar(self.canvas, orient = "vertical",
        command = self.canvas.yview)
    mail_scroll.pack(side = RIGHT, fill = Y)

    self.canvas.config(yscrollcommand = mail_scroll.set)

    self.mailbox_frame.bind("<Configure>", self.OnFrameConfigure)


def OnFrameConfigure(self, event):
    self.canvas.configure(scrollregion=self.canvas.bbox("all"))

我还提供了一个带有彩色边框的图像,这样你可以看到我的意思。粉红色区域是需要邮箱_框架填充的画布(您可以看到右侧的滚动条):

共有2个答案

宗政元青
2023-03-14

在画布上设置绑定

景令秋
2023-03-14

仅供将来参考,以防其他人需要知道:

        frame = Frame(self.bottom_frame)
        frame.pack(side = LEFT, fill = BOTH, expand = True, padx = 10, pady = 10)

        self.canvas = Canvas(frame, bg = 'pink')
        self.canvas.pack(side = RIGHT, fill = BOTH, expand = True)

        self.mailbox_frame = Frame(self.canvas, bg = 'purple')

        self.canvas_frame = self.canvas.create_window((0,0),
            window=self.mailbox_frame, anchor = NW)
        #self.mailbox_frame.pack(side = LEFT, fill = BOTH, expand = True)

        mail_scroll = Scrollbar(self.canvas, orient = "vertical", 
            command = self.canvas.yview)
        mail_scroll.pack(side = RIGHT, fill = Y)

        self.canvas.config(yscrollcommand = mail_scroll.set)

        self.mailbox_frame.bind("<Configure>", self.OnFrameConfigure)
        self.canvas.bind('<Configure>', self.FrameWidth)

    def FrameWidth(self, event):
        canvas_width = event.width
        self.canvas.itemconfig(self.canvas_frame, width = canvas_width)

    def OnFrameConfigure(self, event):
        self.canvas.configure(scrollregion=self.canvas.bbox("all"))
 类似资料:
  • 我试图使帧动画保持在图像视图的中心,在下载图像之前,动画正在其中播放。基本上,这是一个加载微调器的动画。这是我在xml文件中的imageview。 这是我的框架xml文件 这是我用来启动动画的代码 问题是动画拉伸了Imageview的整个宽度和高度。Imageview设置为fitCenter。我如何避免这种拉伸?

  • 问题内容: 如何自动缩放HTML5 元素以适合页面? 例如,我可以通过将和属性设置为100%来缩放,但是不会缩放吗? 问题答案: 我相信我已经找到了一个优雅的解决方案: JavaScript CSS 到目前为止,对我没有太大的负面性能影响。

  • 当试图创建一个应用程序,包括Tkinter在画布中的图像时,我在调整图像大小时遇到了一些问题。第一个是“从PIL导入图像,ImageTk”在PyCharm集成开发环境中不起作用,并且显示“模块不成立错误:没有名为‘PIL’的模块”。第二个对我来说是不可理解的,因为我是一个编码新手。它发生在我运行我在cmd中提到的python文件时。你能帮我理解这个问题以及我能做些什么吗? 代码: cmd中显示的错

  • 主要内容:Canvas控件基本属性,Canvas控件绘图常用方法Canvas 控件具有两个功能,首先它可以用来绘制各种图形,比如弧形、线条、椭圆形、多边形和矩形等,其次 Canvas 控件还可以用来展示图片(包括位图),我们将这些绘制在画布控件上的图形,称之为“画布对象”。 每一个画布对象都有一个“唯一身份ID”,这是 Tkinter 自动为其创建的,从而方便控制和操作这些画布对象。 通过 Canvas 控件创建一个简单的图形编辑器,让用户可以达到自定义图形的

  • 2 Tkinter 画布方法 本节罗列 Canvas 对象的方法,供需要的读者编程时参考。具体用法请查阅参考资料。 创建图形项的方法 create_arc(<限定框>, <选项>):创建弧形,返回标识号 create_bitmap(<位置>, <选项>):创建位图,返回标识号 create_image(<位置>, <选项>):创建图像,返回标识号 create_line(<坐标序列>, <选项>)

  • 这是一个非常基本的程序,我想用它来制作两个移动的球,但实际上只有一个在移动。 我也尝试过一些变化,但无法让第二个球移动;另一个相关问题-一些人使用方法来实现这一点,而其他人则执行然后重新绘制。我应该使用哪一个?为什么? 这是我的代码,它只设置/移动一个球的动画: