4

我想制作一个在 Tkinter 中启用拆分文本屏幕的窗口。我还希望能够用鼠标“拉伸”屏幕,例如,如果我希望其中一个屏幕暂时大于另一个,我只需用鼠标拖动它即可。

我想我可以在 PanedWindow 小部件中放置一个 Text 小部件,因为我认为 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()
4

2 回答 2

5

您的代码的主要问题是您没有PanedWidnow正确使用。例如,你不能pack或者grid一个PanedWindow在另一个里面。要将一个小部件放置在 a 中PanedWindow,您必须使用窗格窗口.add()方法。因此,要将 m2 放在 m1 中,您必须这样做m1.add(m2)。将 a 视为PanedWindowa Frame, and.add()等价于.pack()or .grid()

此外,您似乎认为 anPanedWindow是一个窗格,但事实并非如此。如果您想要三个并排窗口的三个窗格,您只需要创建一个 的实例PanedWindow,然后调用.add(...)3 次,每个子窗口调用一次。虽然您可以将窗格窗口放在窗格窗口中,但除非一个是水平的,另一个是垂直的,否则这很少是正确的做法。在大多数情况下,您只需要一个实例PanedWindow即可。

于 2014-11-24T13:24:47.400 回答
2

你把这种方法弄得太复杂了。只是按照这里的第一个例子,我做了你想要的:

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()
于 2014-11-24T10:25:41.457 回答