我想制作一个在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()

最佳答案

代码的主要问题是您没有正确使用PanedWidnow。例如,您不能将packgrid一个PanedWindow内另一个。要将一个小部件放置在PanedWindow中,必须使用窗格窗口.add()方法。因此,要将m2放入m1中,必须执行m1.add(m2)。像对待PanedWindow一样对待Frame,并且.add().pack().grid()等效。

同样,您似乎在考虑PanedWindow是一个窗格,而不是。如果您希望三个并排窗口包含三个窗格,则只需创建一个PanedWindow实例,然后调用.add(...) 3次,每个子窗口一次。尽管可以将窗格窗口放置在窗格窗口中,但是除非一个是水平的而另一个是垂直的,否则这几乎是不正确的选择。在大多数情况下,只需要一个PanedWindow实例。

10-06 07:57