Python - Tkinter 框架的 XY 滚动无法有效加载小部件

我有当前代码(从原始代码中删减) - 此代码段也可在此处获得。


import tkinter as tk

import tkinter.ttk as ttk

class ScrolledFrame(tk.Frame):

    def __init__(self, master, **kw):

        tk.Frame.__init__(self, master, **kw)

        vsb = tk.Scrollbar(self, orient='vertical')

        vsb.grid(column=1, row=0, sticky='ns')

        hsb = tk.Scrollbar(self, orient='horizontal')

        hsb.grid(column=0, row=1, sticky='ew')


        self.canvas = canvas = tk.Canvas(self, bd=0, highlightthickness=0,

                        yscrollcommand=vsb.set, xscrollcommand=hsb.set)

        canvas.grid(row=0, column=0, sticky='nsew')

        #canvas.configure(scrollregion=canvas.bbox('all'))

        vsb.config(command=canvas.yview)

        hsb.config(command=canvas.xview)

        self.grid_rowconfigure(0, weight=1)

        self.grid_columnconfigure(0, weight=1)


        # reset the view

        canvas.xview_moveto(0)

        canvas.yview_moveto(0)


        self.interior = interior = tk.Frame(canvas)

        interior_id = canvas.create_window(0, 0, window=interior,

                                           anchor='nw')


        def _configure_interior(event):

            size = (interior.winfo_reqwidth(), interior.winfo_reqheight())

            canvas.config(scrollregion="0 0 %s %s" % size)

            if interior.winfo_reqwidth() != canvas.winfo_width():

                canvas.config(width=interior.winfo_reqwidth())

        interior.bind('<Configure>', _configure_interior)


        def _configure_canvas(event):

            if interior.winfo_reqwidth() != canvas.winfo_width():

                canvas.itemconfigure(interior_id, width=canvas.winfo_width())

        canvas.bind('<Configure>', _configure_canvas)



代码的目的是有一个框架,可以通过 x 和 y 轴滚动;但是,出现了一个问题,即在 x 轴上滚动会导致未绘制项目:

http://img3.mukewang.com/61b06a170001f27803350031.jpg

然而,y 轴似乎工作得很好 - 我试图通过不同scrollregion=设置(即'all')的程序进行更改,但没有成功,它似乎完全删除了 x 轴的功能。


陪伴而非守候
浏览 275回答 1
1回答

慕姐4208626

您明确地将内部框架的宽度设置为与画布的宽度相同。例如,当程序启动时,画布的宽度将略小于 360 像素,因此您将内部框架设置为该尺寸。在我的机器上最终是 309 像素。因此,当您滚动时,您将只能看到 309 像素的按钮。滚动的全部意义在于您试图看到比窗口大的东西,但是您人为地使内部框架与窗口大小相同。您应该停止强制内部框架与画布大小相同,或者至少停止强制其小于画布。它需要是它的自然大小。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python