我想创建一个窗口,在Tkinter中启用分割文本屏幕。我也希望能够用鼠标“拉伸”屏幕,例如,如果我希望其中一个屏幕暂时比另一个屏幕大,我只需用鼠标拖动它。
我认为我可以将一个Text小部件放在PanedWindow小部件中,因为我认为PanedWindow小部件总是可伸缩的,但我的代码并不能完成这项工作。我能够分屏,但它们不能伸缩。到目前为止,这是我的(不必要的长而简单的)代码:
from Tkinter import *
root = Tk()
# Seems strange to column- and rowconfigure the root but if I don't -
# the text widgets won't resize at all
for i in range(4):
root.columnconfigure(0, weight=1)
for i in range(1,3):
root.rowconfigure(1, weight=1)
# make a master PanedWindow
m1 = PanedWindow(root)
m1.grid(column=0, row=0, rowspan=4, columnspan=4, sticky=E+N+W+S)
for i in range(4):
m1.columnconfigure(i, weight=1) # Enable vertical resizing
for i in range(1,3):
m1.rowconfigure(i, weight=1) #Enable horizontal resizing
# make a PanedWindow inside m1, positioned to the left
m2=PanedWindow(m1)
m2.grid(column=0, row=1, columnspan=2, rowspan=2, sticky=E+N+W+S)
for i in range(2):
m2.columnconfigure(i, weight=1) # Enable vertical resizing
for i in range(1,3):
m2.rowconfigure(i, weight=1) #Enable horizontal resizing
# make another PanedWindow inside m1, positioned to the right
m3=PanedWindow(m1)
m3.grid(column=2, row=1, columnspan=2, rowspan=2, sticky=E+N+W+S)
for i in range(2, 4):
m3.columnconfigure(i, weight=1) # Enable vertical resizing
for i in range(1,3):
m3.rowconfigure(i, weight=1) #Enable horizontal resizing
# Add a text widget in m2
text1 = Text(m2, height=15, width =15)
m2.add(text1)
# Add another textwidget in m3
text2=Text(m3, height=15, width=15)
m3.add(text2)
root.mainloop()
答案 0 :(得分:3)
您的代码的主要问题是您没有正确使用PanedWidnow
。例如,您不能在另一个内部pack
或grid
一个PanedWindow
。要将一个窗口小部件放在PanedWindow
中,您必须使用窗格窗口.add()
方法。因此,要将m2放入m1,您必须m1.add(m2)
。将PanedWindow
视为Frame
,.add()
相当于.pack()
或.grid()
。
此外,您似乎认为PanedWindow
是一个窗格,而不是。如果你想要三个并排窗口的三个窗格,你只需要创建一个PanedWindow
的实例,然后调用.add(...)
三次,每个子窗口一次。当你可以将paned窗口放在paned窗口中时,除非一个是水平的而另一个是垂直的,否则很少做正确的事情。在大多数情况下,您只需要PanedWindow
的单个实例。
答案 1 :(得分:2)
你这样做太复杂了。按照第一个例子here,我做了你想要的:
from Tkinter import *
root = Tk()
m = PanedWindow(root)
m.pack(fill=BOTH, expand=1)
text1 = Text(m, height=15, width =15)
m.add(text1)
text2=Text(m, height=15, width=15)
m.add(text2)
root.mainloop()