【发布时间】:2015-12-19 00:46:10
【问题描述】:
我正在编写一个自定义 Python 类来简化与 tkinter 的交互,这样我就可以简化编写自己的 GUI 应用程序的过程。到目前为止,这很棘手,但进展一直很稳定,而且效果很好。
但是,我遇到了特定的意外行为,我无法确定原因。当我将一个元素定义为具有行跨度时,它不会扩展以适应我指定的行数。
这是我当前输出的截图:
屏幕截图中的 GUI 是按照指定的顺序定义的:
-
10 个标签定义为“1”到“10”,在单元格 0,0 - 0,10 中。
-
添加了一个 rowspan = 1 的框架,其中包含标签“Rowspan 1”到 1,0
-
rowspan = 2 的帧被添加到 2,0
-
rowspan = 3 的帧被添加到 3,0
-
...
-
将 rowspan = 10 的帧添加到 10,0
-
将带有“拉伸后”的标签添加到 11,0
如您在上面的屏幕截图中所见,行跨度似乎与设置的行跨度不匹配。
以下是相关代码:
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
任何想法为什么会发生这种情况?当我对 rowspan 进行硬编码时,它仍然表现出这种行为。
【问题讨论】:
-
您在
Frame(self.frame,...)中使用self.frame作为父级,但随后您覆盖了此变量self.frame = tkinter.Frame( ... )- 所以下一个Frame具有不同的父级。 -
尝试使用
new_frame = tkinter.Frame(self.frame, ... )和new_frame.grid(...)
标签: python python-3.x tkinter