Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter滚动条不工作_Python_Python 3.x_Tkinter_Tk_Tkinter Canvas - Fatal编程技术网

Python Tkinter滚动条不工作

Python Tkinter滚动条不工作,python,python-3.x,tkinter,tk,tkinter-canvas,Python,Python 3.x,Tkinter,Tk,Tkinter Canvas,我在Python3.4上运行了一段tkinter代码,这是一个放置在画布中的大框架,带有一个垂直滚动条,但是滚动条是灰色的,并且似乎没有链接到框架的大小。我使用的代码基本上是: class EntryWindow: def __init__(self, master): self.master = master self.master.minsize(750, 800) self.master.maxsize(1000, 800)

我在Python3.4上运行了一段tkinter代码,这是一个放置在画布中的大框架,带有一个垂直滚动条,但是滚动条是灰色的,并且似乎没有链接到框架的大小。我使用的代码基本上是:

class EntryWindow:
    def __init__(self, master):
        self.master = master
        self.master.minsize(750, 800)
        self.master.maxsize(1000, 800)
        self.canvas = tk.Canvas(self.master, borderwidth=0, bg='#ffffff')
        self.vsb = tk.Scrollbar(self.master)
        self.master_frame = tk.Frame(self.canvas)
        self.vsb.pack(side="right", fill='y')
        self.canvas.pack(side='left', fill='both', expand=True)
        self.canvas.create_window((0,0), window=self.master_frame, anchor='nw', tags='self.master_frame')
        self.canvas.config(yscrollcommand=self.vsb.set)
        self.master_frame.grid()

        ###build widgets and place into master_frame
        ...
master_框架
中填充了使用网格几何管理器放置的大约36个小部件,垂直高度约为2000像素,但滚动条无法工作

我看到一篇关于使用ttk滚动条的帖子,但当我导入时,我无法让它工作。我使用的输入语句是:

import tkinter as tk
import tkinter.ttk as ttk
然后将行
self.vsb=tk.Scrollbar(self.master)
替换为
self.vsb=ttk.Scrollbar(self.master)
,但这也无法修复它。我还尝试删除master上的最小/最大大小(这些不是最终值,我一直在使用它)

我做错什么了吗?我觉得它可能在我设置canvas.config()的地方,但我阅读了文档,它似乎是正确的。明天,我计划在构建框架后尝试将框架加载到画布中


但同时,如果这不起作用,任何帮助都会很好!谢谢

配置滚动画布时必须执行三项操作:

  • 通过将画布的
    yscrollcommand
    属性配置为指向滚动条,使画布在滚动时通知滚动条
  • 通过配置滚动条的
    命令
    属性,让滚动条在拖动画布时控制画布
  • 通过配置画布的
    scrollregion
    属性告诉画布虚拟画布的哪个部分应该是可滚动的
  • 你忘了做什么。将小部件添加到主框架后,您应该执行以下操作:

    self.canvas.configure(scrollregion=self.canvas.bbox("all")
    
    上面将告诉画布和滚动条,画布上可滚动的区域是包含画布上所有对象的区域

    最后,您需要删除以下代码行,因为您已经使用
    create\u window
    将框架添加到画布中。使用
    pack
    place
    grid
    添加到画布的帧不会滚动:

    # remove this line
    self.master_frame.grid()
    

    有关可滚动框架的工作示例,请参见配置滚动画布时必须执行三项操作:

  • 通过将画布的
    yscrollcommand
    属性配置为指向滚动条,使画布在滚动时通知滚动条
  • 通过配置滚动条的
    命令
    属性,让滚动条在拖动画布时控制画布
  • 通过配置画布的
    scrollregion
    属性告诉画布虚拟画布的哪个部分应该是可滚动的
  • 你忘了做什么。将小部件添加到主框架后,您应该执行以下操作:

    self.canvas.configure(scrollregion=self.canvas.bbox("all")
    
    上面将告诉画布和滚动条,画布上可滚动的区域是包含画布上所有对象的区域

    最后,您需要删除以下代码行,因为您已经使用
    create\u window
    将框架添加到画布中。使用
    pack
    place
    grid
    添加到画布的帧不会滚动:

    # remove this line
    self.master_frame.grid()
    

    有关可滚动框架的工作示例,请参见

    首先,您不应同时使用
    pack
    grid
    几何体管理方法。虽然它似乎不是问题的根源,但通常会引发
    TclError
    。其次,
    frame
    小部件被用作嵌套其他小部件的容器。因此,您应该使用
    frame
    小部件:
    master\u frame
    作为
    canvas
    小部件的父级。第三,我还发现您在正确导入和使用
    tkinter
    时遇到了一些问题。请记住,如果您从tkinter import*导入
    ,则无法使用
    tk.
    。否则,它将引发一个
    名称错误
    。而且您还没有配置
    滚动条的
    命令
    选项
    @ParvizKarimli:您关于主框架是画布父框架的评论是错误的。它需要是一个孩子,就像问题中所说的那样。此外,我认为进口产品没有问题。OP访问Tkinter命令的任何地方都会在其前面加上
    tk.
    。首先,您不应该同时使用
    pack
    grid
    几何体管理方法。虽然它似乎不是问题的根源,但通常会引发
    TclError
    。其次,
    frame
    小部件被用作嵌套其他小部件的容器。因此,您应该使用
    frame
    小部件:
    master\u frame
    作为
    canvas
    小部件的父级。第三,我还发现您在正确导入和使用
    tkinter
    时遇到了一些问题。请记住,如果您从tkinter import*
    导入
    ,则无法使用
    tk.
    。否则,它将引发一个
    名称错误
    。而且您还没有配置
    滚动条的
    命令
    选项
    @ParvizKarimli:您关于主框架是画布父框架的评论是错误的。它需要是一个孩子,就像问题中所说的那样。此外,我认为进口产品没有问题。OP访问Tkinter命令的任何地方,都会在其前面加上
    tk.
    。我觉得您的最后一段代码对我来说是最重要的-我的主框架中充满了与
    grid()
    方法对齐的小部件。当我删除该方法时,窗口缩小了一吨,即使在添加了所有widgetsI之后配置了scrollregion,滚动条仍然无法工作。最后,通过使用您提供的链接,添加onFrameConfigure函数并将其绑定到帧的bu,解决了这个问题