当前位置:  开发笔记 > 编程语言 > 正文

Python tkinter rowspan没有正确调整元素大小

如何解决《Pythontkinterrowspan没有正确调整元素大小》经验,为你挑选了1个好方法。

我正在编写一个自定义Python类,它简化了与tkinter的交互,因此我可以简化编写自己的GUI应用程序的过程.到目前为止它一直很棘手,但进展一直很稳定,而且运作良好.

但是,我遇到了特定的意外行为,我无法查明原因.当我定义一个具有行跨的元素时,它不会扩展以适合我指定的行数.

这是我当前输出的屏幕截图:

不是我所希望的

屏幕截图中的GUI按指定的顺序定义:

在单元格0,0-0,10中,10个标签被定义为"1"到"10".

添加了rowspan = 1的框架,其中包含标签"Rowspan 1"到1,0

rowspan = 2的帧被添加到2,0

将rowspan = 3的帧添加到3,0

...

将rowspan = 10的帧添加到10,0

带有"After Stretched"的标签被添加到11,0

正如您在上面的屏幕截图中看到的那样,rowspan似乎与设置的rowspan不匹配.

这是相关代码:

    self.frame = tkinter.Frame(self.frame, borderwidth=1, relief=border)
    self.frame.grid(row=self.grid_y, column=self.grid_x,
                    columnspan=self.grid_x_span, rowspan=self.grid_y_span,
                    padx=5, pady=5, sticky="nsew")

    print("Frame:")
    print("X,Y:",self.grid_x,self.grid_y)
    print("X,Y Spans:",self.grid_x_span, self.grid_y_span)

...这里是打印输出,显示生成此输出时变量的值:

    Frame:
    X,Y: 1 0
    X,Y Spans: 1 1
    Frame:
    X,Y: 2 0
    X,Y Spans: 1 2
    Frame:
    X,Y: 3 0
    X,Y Spans: 1 3
    Frame:
    X,Y: 4 0
    X,Y Spans: 1 4
    Frame:
    X,Y: 5 0
    X,Y Spans: 1 5
    Frame:
    X,Y: 6 0
    X,Y Spans: 1 6
    Frame:
    X,Y: 7 0
    X,Y Spans: 1 7
    Frame:
    X,Y: 8 0
    X,Y Spans: 1 8
    Frame:
    X,Y: 9 0
    X,Y Spans: 1 9
    Frame:
    X,Y: 10 0
    X,Y Spans: 1 10

任何想法为什么会这样?当我对rowpan进行硬编码时,它仍然表现出这种行为.



1> 7stud..:

所以你想要这样的东西:

在此输入图像描述

这是代码:

import tkinter as tk

root = tk.Tk()
main_frame = tk.Frame(root, border=3, relief=tk.GROOVE)
main_frame.grid()

for i in range(10):

    #Create Labels for numbering the rows:
    tk.Label(main_frame, 
            text=str(i+1), 
            border=1,
            relief=tk.GROOVE,
            padx=20,
            pady=20,
            ).grid(column=0, row=i)

    #Create Frames with a Label inside:
    frame = tk.Frame(main_frame,
        border=1,
        relief=tk.GROOVE,
        background="blue",
    )

    frame.grid(row=0, column=i+1, rowspan=i+1, sticky=tk.N+tk.S)

    tk.Label(frame, 
            text='Rowspan {}'.format(i+1), 
            border=1,
            relief=tk.GROOVE,
            padx=20,
            pady=20,).grid()

root.mainloop()

通常,框架会拥抱其中的小部件.stickygrid()的参数使框架垂直拉伸并填充rowspan指定的行.

如果删除标签周围的边框和框架的背景颜色,您将得到:

在此输入图像描述

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有