在Tkinter中将滚动条拉伸到画布大小

伊施

对Tkinter来说还很陌生。我浏览过许多有关此问题的帖子,但没有一个为我解决。我正在尝试创建一个简单的GUI,其中有一个显示图像的画布。画布是可滚动的,但是滚动条不会延伸到画布的大小。

以下是我代码的相关部分。这里没有实际显示图像的代码,图像由openFileDialog给出,但是滚动条与图像保持相同。

from Tkinter import *
import Image
import ImageTk
import numpy as np
import tkFileDialog
import os as os

class DIP(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent) 
        self.parent = parent        
        self.initUI()
        self.isOpenedYet = False

    def initUI(self):
        self.parent.title("Viewer")
        self.pack(fill = BOTH, expand = 1)

        menubar = Menu(self.parent)
        self.parent.config(menu = menubar)

        vsframe = Frame(self, width=500, height=500)
        vsframe.grid(row = 1, column = 2, columnspan = 2, sticky = "nw")
        hsframe = Frame(self, width=500, height=500)
        hsframe.grid(row = 2, column = 1, rowspan = 2, sticky = "nw")
        self.canv = Canvas(self, relief=SUNKEN)
        self.canv.config(width=500, height=500)
        self.canv.config(highlightthickness=0)
        self.sbarV = Scrollbar(vsframe, orient=VERTICAL)
        self.sbarH = Scrollbar(hsframe, orient=HORIZONTAL)
        self.sbarV.config(command=self.canv.yview)
        self.sbarH.config(command=self.canv.xview)

        self.canv.config(yscrollcommand=self.sbarV.set)
        self.canv.config(xscrollcommand=self.sbarH.set)

        self.sbarV.pack(expand = YES, fill=BOTH)
        self.sbarH.pack(expand = YES, fill=BOTH)

        self.label2 = Label(self, border = 5)
        self.label2.grid(row = 0, column = 1)
        self.canv.grid(row = 1, column = 1, sticky = "nw")

        #Open Image Menu
        fileMenu = Menu(menubar)
        fileMenu.add_command(label = "Open", command = self.onOpen)
        menubar.add_cascade(label = "File", menu = fileMenu)

        #menu for algorithms
        basicMenu = Menu(menubar)
        basicMenu.add_command(label = "Super Resolution-stub", command = self.SuperRes)
        menubar.add_cascade(label = "Algorithms", menu = basicMenu)

我想念什么?

布莱恩·奥克利(Bryan Oakley)

这里发生了几件事情。

首先,您无需将滚动条放在单独的框架中。它们可以(通常应该)与画布位于同一帧中。

其次,滚动框没有正确的“粘性”值。垂直滚动条需要“粘贴”到指定区域的顶部和底部,水平滚动条需要“粘贴”在指定区域的左侧和右侧。另外,您的画布应“粘贴”到其区域的所有侧面,以使其充满该区域。

第三,您不会对行和列赋予任何权重,因此它们不会按您期望的方式调整大小。在您的情况下,您想使包含画布的行和列的权重为1(一),因此它将占用GUI中的所有额外空间。

综合所有建议,以下是如何获得您想要的东西:

def initUI(self):
    self.parent.title("Viewer")
    self.pack(fill = BOTH, expand = 1)

    menubar = Menu(self.parent)
    self.parent.config(menu = menubar)

    self.grid_rowconfigure(1, weight=1)
    self.grid_columnconfigure(1, weight=1)

    self.canv = Canvas(self, relief=SUNKEN)
    self.canv.config(width=500, height=500)
    self.canv.config(highlightthickness=0)
    self.sbarV = Scrollbar(self, orient=VERTICAL)
    self.sbarH = Scrollbar(self, orient=HORIZONTAL)

    self.sbarV.config(command=self.canv.yview)
    self.sbarH.config(command=self.canv.xview)

    self.canv.config(yscrollcommand=self.sbarV.set)
    self.canv.config(xscrollcommand=self.sbarH.set)

    self.sbarV.grid(row=1, column=2, sticky="ns")
    self.sbarH.grid(row=2, column=1, sticky="ew")

    self.label2 = Label(self, border = 5, text="label 2")
    self.label2.grid(row = 0, column = 1)
    self.canv.grid(row = 1, column = 1, sticky = "nsew")

    ...

顺便说一下,这是调试此类问题的提示:在开发过程中,为每个“大”小部件(框架,画布,文本小部件)赋予独特的背景色。例如,为“自我”提供蓝色背景,为画布提供粉红色背景,依此类推。查看每个项目的去向以及它们相对于彼此的大小调整变得更加容易。否则,有时可能很难知道屏幕上的某些空白是否属于主窗口,子窗口等。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何为画布大小更新Tkinter滚动条大小

来自分类Dev

画布上的Tkinter调整大小滚动条无法调整

来自分类Dev

画布上的Tkinter调整大小滚动条无法调整

来自分类Dev

Tkinter修复框架的大小不与滚动条重叠画布边框

来自分类Dev

Tkinter修复框架的大小不与滚动条重叠画布边框

来自分类Dev

tkinter调整窗口大小而滚动条不消失

来自分类Dev

UITableView滚动条没有拉伸

来自分类Dev

python tkinter按钮在画布网格中绑定并将滚动条添加到画布

来自分类Dev

如何防止 tkinter 画布的子窗口跨过画布滚动条

来自分类Dev

Tkinter怪异的滚动条

来自分类Dev

tkinter滚动条没有滚动条

来自分类Dev

画布正弦文本滚动条

来自分类Dev

Python Tkinter滚动条摇晃滚动

来自分类Dev

Tkinter滚动条不滚动

来自分类Dev

滚动条tkinter不滚动

来自分类Dev

Tkinter滚动条不滚动

来自分类Dev

Tkinter 滚动条不滚动

来自分类Dev

如何以编程方式将滚动条移动到画布的底部-Tkinter

来自分类Dev

如何使用python 3.8在tkinter中的画布中创建滚动条

来自分类Dev

Python tkinter:画布滚动条出现但不起作用

来自分类Dev

Python Tkinter - 在画布边缘放置垂直和水平滚动条

来自分类Dev

Python tkinter 使用画布动态创建带有滚动条的窗口

来自分类Dev

为什么画布在添加小部件时不使用滚动条滚动和自动调整大小?

来自分类Dev

为什么画布在添加小部件时不使用滚动条滚动和自动调整大小?

来自分类Dev

如何增加Datagrid滚动条的大小?

来自分类Dev

以编程方式找出滚动条大小

来自分类Dev

控制Tkinter中滚动条的位置

来自分类Dev

Tkinter滚动条出现问题

来自分类Dev

类中的Python Tkinter滚动条

Related 相关文章

热门标签

归档