我遇到一个问题,即创建一个tkinter标签框架会影响另一个标签框架。下面是一些将重新创建问题的代码。我希望第二个标签框self.group2
延伸到低于第一个框架self.group1
的底部。但是,如代码所示,self.group1
的底部已扩展为与self.group2
的结尾相匹配。
import Tkinter
class gui(Tkinter.Tk):
def __init__(self,parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def initialize(self):
self.grid()
for x in xrange(0, 11):
self.grid_rowconfigure(x,weight=1)
self.grid_columnconfigure(x,weight=1)
self.group1 = Tkinter.LabelFrame(self, text="Group1", padx=5, pady=5)
self.group1.grid(row=0, column=0, padx=10, pady=10, sticky='NSEW')
self.b1 = Tkinter.Button(self.group1, text='Click', command=self.b1_f)
self.b1.grid(row=1, column=0, sticky='NSEW')
def b1_f(self):
self.group2 = Tkinter.LabelFrame(self, text="Group2", padx=5, pady=5)
self.group2.grid(row=0, column=1, padx=10, pady=10, sticky='NSEW')
for row_count in xrange(6):
Tkinter.Label(self.group2, text=row_count).grid(row=row_count, column=1, sticky='NSEW')
if __name__ == "__main__":
# loop the window
app = gui(None)
app.mainloop()
在创建group2期间添加rowspan=7
会有所帮助,但仍然会修改group1。
由于
答案 0 :(得分:2)
我在使用布局管理器时发现的令人困惑的一点是,它们可以在多个层上工作'。在此示例中,您具有包含2个LabelFrame的窗口图层,然后每个LabelFrame都有一个图层。图层没有相互连接。
在这种情况下,问题出现在'窗口层'中。在此图层中,您有2个放置在第0行的LabelFrame,并使用sticky来填充整个区域。这意味着如果其中一个框架的尺寸发生变化,另一个框架也会发生变化。
试试这个:
import Tkinter
class gui(Tkinter.Tk):
def __init__(self,parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def initialize(self):
self.grid()
self.grid_rowconfigure(1, weight=1)
self.group1 = Tkinter.LabelFrame(self, text="Group1", padx=5, pady=5)
self.group1.grid(row=0, column=0, padx=10, pady=10, sticky='NSEW')
self.b1 = Tkinter.Button(self.group1, text='Click', command=self.b1_f)
self.b1.grid(row=1, column=0, sticky='NSEW')
def b1_f(self):
self.group2 = Tkinter.LabelFrame(self, text="Group2", padx=5, pady=5)
self.group2.grid(row=0, column=1, rowspan=2, padx=10, pady=10, sticky='NSEW')
for row_count in xrange(6):
Tkinter.Label(self.group2, text=row_count).grid(row=row_count, column=1, sticky='NSEW')
if __name__ == "__main__":
# loop the window
app = gui(None)
app.mainloop()
这里我改变了所以group2 frame rowspan是2然后在第二行设置weight = 1。通过这样做,第一行的大小不应该改变,即使第二行也是如此。