Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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_Tkinter_Resize - Fatal编程技术网

Python Tkinter动态滚动条大小调整问题

Python Tkinter动态滚动条大小调整问题,python,tkinter,resize,Python,Tkinter,Resize,我在Python上写了一个动态调整大小的GUI,我的意思是,如果窗口中所有元素的高度都大于窗口的高度,滚动条就会出现在右侧,但是如果我调整窗口的大小并且所有元素的高度都小于窗口,滚动条就会消失。 我使用事件完成了此操作。这是我使用的代码的一部分: mycanvas = Canvas(self.parent,bd=0,highlightthickness=0,relief='flat') sbar = tk.Scrollbar(mycanvas,orient='vertical')

我在Python上写了一个动态调整大小的GUI,我的意思是,如果窗口中所有元素的高度都大于窗口的高度,滚动条就会出现在右侧,但是如果我调整窗口的大小并且所有元素的高度都小于窗口,滚动条就会消失。 我使用
事件完成了此操作。这是我使用的代码的一部分:

    mycanvas = Canvas(self.parent,bd=0,highlightthickness=0,relief='flat')
    sbar = tk.Scrollbar(mycanvas,orient='vertical')
    sbar.config(command=mycanvas.yview)
    mycanvas.config(yscrollcommand=sbar.set)

    def canvasscroll(event):
        mycanvas.yview('scroll',int(-1*(event.delta/120)), "units")
    def resizecanvas(event):
        if self.mainyposition > event.height: #mainyposition is the addition of the height of all widgets in screen
            sbar.pack(side=RIGHT, fill=Y)
        else:
            sbar.forget()
        print(event.height)

    self.widgetname.bind_all("<MouseWheel>", canvasscroll)
    self.widgetname.bind_all("<Configure>", resizecanvas)

感谢大家。

自动滚动条行为非常棘手,我看不到任何明显的原因导致您的软件包出现问题,但实际上没有足够的代码可以尝试。但是,我可以向您指出我的滚动框架实现,它将一个框架包装到画布中,将该画布连同两个滚动条包装到一个外部框架中,其默认行为是自动隐藏两个滚动条,并且仅当内部框架大小超过画布时才显示每个滚动条,希望这对您有所帮助我一直在查找代码并试图找到错误,当我调用
sbar
的某个方法到事件函数中时,错误就出现了。一切正常,但当我关闭窗口时,它返回上面的错误。。。事件函数中可能存在与局部或全局相关的内容,而不是它所属的类?您的代码显示了错误的windowname,这意味着在调用代码时,滚动条已被破坏,这意味着关闭窗口以某种方式调用了您的事件,因此更改范围无法解决此问题,只有在关闭窗口时防止调用它才能阻止它是的,是的,这就是我所想的,关闭窗口调用事件,并且没有小部件,返回错误。当窗口关闭时,有没有办法取消事件绑定?有一个
unbind
方法,它只将事件作为参数,您可以使用
tk.protocol('WM\u DELETE\u window',func)
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python34\lib\tkinter\__init__.py", line 1702, in __call__
      return self.func(*args)
  File "Y:\Factory\GLP2-e Admin (Todos los archivos)\Nueva Interfaz\classmain.py", line 108, in resizecanvas
      sbar.pack(side=RIGHT, fill=Y)
  File "C:\Python34\lib\tkinter\__init__.py", line 2140, in pack_configure + self._options(cnf, kw))
  _tkinter.TclError: bad window path name ".!canvas.!scrollbar"
  Exception in Tkinter callback
  Traceback (most recent call last):
  File "C:\Python34\lib\tkinter\__init__.py", line 1702, in __call__
      return self.func(*args)
  File "Y:\Factory\GLP2-e Admin (Todos los archivos)\Nueva Interfaz\classmain.py", line 108, in resizecanvas
  sbar.pack(side=RIGHT, fill=Y)
  File "C:\Python34\lib\tkinter\__init__.py", line 2140, in pack_configure + self._options(cnf, kw))
  _tkinter.TclError: bad window path name ".!canvas.!scrollbar"
  Exception in Tkinter callback
  Traceback (most recent call last):
  File "C:\Python34\lib\tkinter\__init__.py", line 1702, in __call__
      return self.func(*args)
  File "Y:\Factory\GLP2-e Admin (Todos los archivos)\Nueva Interfaz\classmain.py", line 108, in resizecanvas
      sbar.pack(side=RIGHT, fill=Y)
  File "C:\Python34\lib\tkinter\__init__.py", line 2140, in pack_configure + self._options(cnf, kw))
  _tkinter.TclError: bad window path name ".!canvas.!scrollbar"
  [Finished in 22.3s]