当前位置: 首页 > 面试题库 >

如何禁用手动调整Tkinter的Treeview列的大小?

戈安翔
2023-03-14
问题内容

由于由于Tk /Tkinter的限制,我无法水平滚动Treeview列,因此我想使其具有粘性,以便将其连接到框架。

问题是用户可以手动调整Treeview列的大小,这会以某种方式弄乱我的界面。是否可以禁用此类功能?

用户可以拖动鼠标来调整列的大小。我要禁用此功能。

设置minwidth为某个值可以防止列缩小,但是仍然可以将其调整为更大的宽度。我想我可以对更改宽度做出反应并将其恢复为原始宽度,但是必须有一种更好的方法来实现。


问题答案:

以下仅在Windows上进行了测试,其他操作系统可能有所不同。

对于任何将来的读者,从Tk
8.5开始,Treeviews都有一种identify_region方法可以接受屏幕位置(x,y),并将返回与这些坐标所占据的Treeview区域相对应的字符串。

返回值之一是“ separator”。

我用它来捕获分隔符上的双击事件以自动调整列的大小,但是您也可以用它来捕获单击事件并阻止它们。

例如:

def handle_click(event):
    if treeview.identify_region(event.x, event.y) == "separator":
        return "break"

#...

treeview.bind('<Button-1>', handle_click)

这样做的好处是 不会 禁用整个树形视图-因此您仍然可以选择/扩展/折叠行,单击列标题进行排序等-您将无法调整列的大小。

请注意,即使禁用了调整大小,“双箭头”光标(⇔)仍会出现。您还可以通过对<Motion>事件html" target="_blank">执行完全相同的操作来防止显示双箭头光标(绑定到该事件,检查该事件是否在分隔符上方,并通过返回字符串阻止传播该事件"break")。

>>> sys.version
'3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)]'
>>> tkinter.TkVersion
8.6


 类似资料:
  • 我有一个窗口与列表框,调整大小与彼此。我用网格来做这个。列表框下面有一排按钮,它们当前正在随着窗口移动和调整大小。我希望按钮保持原位,并在窗口和列表框调整大小时保持一致的大小(所以按钮总是保持在列表框的左下角)。 有简单的方法吗?我今天才开始使用Tkinter,所以我可能只是在文档中错过了它,或者可能只是在网格布局上感到困惑。 按钮设置如下: 我已经尝试了所有粘性组合,但那些不调整按钮大小的组合仍

  • 我想在tkinter中创建由笔记本框架和每个选项卡内的几个框架组成的简单图形用户界面。假设我想在笔记本的每个选项卡内创建两个标记的框架,跨越100%的窗口宽度和50%的窗口高度。 屏幕布局 我将有更多的帧/元素,我想采取窗口宽度/高度的x%。 我读到tkintergui应该自动调整窗口大小时,但我不能让它工作。 如何设置帧以获取100%的窗口宽度和(例如)50%的窗口高度? 如何使框架居中,使其不

  • 问题内容: 我正在创建一个,然后调用该方法。现在,所需的行为是在任何情况下用户都不应调整JFrame的大小。通过最大化或拖动边框。应该是500x500。我该怎么做?我还附上了代码,以防您能更好地指导我。 问题答案: 您可以在构造函数的“帧初始化”下使用一个简单的调用: 调用之后,窗口将无法调整大小。

  • 问题内容: 我有一个程序,该程序创建一个窗口,其中根据复选框显示一条消息。 显示消息而不显示消息时,如何使窗口大小恒定? 问题答案: 此代码使窗口具有用户无法更改窗口尺寸的条件,并且还禁用了最大化按钮。 在程序中,您可以使用@Carpetsmoker的答案或通过以下方式更改窗口尺寸: 将其实现到代码中应该很容易。:)

  • 在tkinter中调整窗口大小时,有没有办法动态调整小部件的大小? 这是代码: 当我调整窗口大小时,窗口小部件的宽度和高度保持不变。 我想要的是根据窗口的大小动态调整窗口小部件的大小。 有没有办法在tkinter中实现这一点? 如果有人能帮我,那就太好了。

  • 问题内容: 我有一个与作为布局经理。 在南边界中,我有一个,我希望用户可以调整其大小,即用户可以单击边界的边缘并将其向上拖动以使其变大。 您是否知道我可以做到这一点? 问题答案: 为了使框架中的面板可单独调整大小,您需要将其添加到。 而不是将其放置在框架的南部,而是将其放置在中心。拆分窗格将使拆分中的底部面板看起来像在南方,而拆分中的顶部面板将位于框架的中心。 确保使用设置两个面板的方向。 然后,