gpt4 book ai didi

python - PanedWindow 与文本小部件的问题

转载 作者:行者123 更新时间:2023-12-01 05:18:56 25 4
gpt4 key购买 nike

我在使用 PanedWindow 时遇到了一些问题 - 我不太擅长,而且有点困惑。

在此示例中,我尝试并排放置 2 个文本小部件:

 #!/usr/bin/env python

import os
from Tkinter import *
import ttk

root = Tk()
root.geometry("%dx%d+0+0" % (1400,850))

mainpanedframeframe = PanedWindow(root,orient=HORIZONTAL)
mainpanedframeframe.pack(fill=BOTH, expand=TRUE)
auxframe1 = PanedWindow(mainpanedframeframe)
auxframe2 = PanedWindow(mainpanedframeframe)
mainpanedframeframe.add(auxframe1)
mainpanedframeframe.add(auxframe2)


# --------------- chtext -------------
chtext = Text(auxframe1, width=50)
auxframe1.add(chtext)
chyscrollbar=Scrollbar(auxframe1, orient=VERTICAL, command=chtext.yview)
chtext["yscrollcommand"]=chyscrollbar.set
chyscrollbar.pack(side=RIGHT,fill=Y)

# --------------- configtext -------------
configtext = Text(auxframe2, width=150)
auxframe2.add(configtext)
yscrollbar=Scrollbar(auxframe2, orient=VERTICAL, command=configtext.yview)
configtext["yscrollcommand"]=yscrollbar.set
yscrollbar.pack(side=RIGHT, fill=Y)

for i in range(50):
configtext.insert(INSERT,"test configtext \n\ntest 2\ntest 3\ntest 4\n\ntest x\n\n\n\n")
chtext.insert(INSERT,"test chtext \n\ntest 2\ntest 3\ntest 4\n\ntest x\n\n\n\n")

#------------------------------
mainloop()

它有效,但我不知道如何避免这种情况,在开始时,第一个小部件完全向左收缩。

作为第二个问题 - 更令人费解:如果第二个文本窗口是一个简单地继承自 Text 的类,而没有其他任何东西(我将需要做更复杂的事情,但正如本例中所示,它只是一个调用到 Text() ),垂直滚动条根本不显示!

#!/usr/bin/env python

import os
from Tkinter import *
import ttk

class MyText(Text):
def __init__(self, parent, *args, **kwargs):
Text.__init__(self, *args, **kwargs)
self.parent = parent


root = Tk()
root.geometry("%dx%d+0+0" % (1400,850))

mainpanedframeframe = PanedWindow(root,orient=HORIZONTAL)
mainpanedframeframe.pack(fill=BOTH, expand=TRUE)
auxframe1 = PanedWindow(mainpanedframeframe)
auxframe2 = PanedWindow(mainpanedframeframe)
mainpanedframeframe.add(auxframe1)
mainpanedframeframe.add(auxframe2)


# --------------- chtext -------------
chtext = Text(auxframe1, width=50)
auxframe1.add(chtext)
chyscrollbar=Scrollbar(auxframe1, orient=VERTICAL, command=chtext.yview)
chtext["yscrollcommand"]=chyscrollbar.set
chyscrollbar.pack(side=RIGHT,fill=Y)

# --------------- configtext -------------
configtext = MyText(auxframe2, width=150)
auxframe2.add(configtext)
yscrollbar=Scrollbar(auxframe2, orient=VERTICAL, command=configtext.yview)
configtext["yscrollcommand"]=yscrollbar.set
yscrollbar.pack(side=RIGHT, fill=Y)

for i in range(50):
configtext.insert(INSERT,"test configtext \n\ntest 2\ntest 3\ntest 4\n\ntest x\n\n\n\n")
chtext.insert(INSERT,"test chtext \n\ntest 2\ntest 3\ntest 4\n\ntest x\n\n\n\n")

#------------------------------
mainloop()

最佳答案

对于问题 1:Tk panedwidget 是一个或多个 Pane 的几何管理器。当您将小部件添加为 Pane 时,您可以指定一些选项,也可以随后使用 paneconfigure 指定这些选项。命令。例如:

auxframe1.add(chtext, stretch="always")
auxframe.paneconfigure(chtext, stretch="always")
auxframe.panecget(chtext, "stretch")

使用 stretch="always" 应该可以解决您最初的问题。

文档中提到了下一点:“每个 Pane 包含一个小部件,...”。您正在使用 Pane 窗口管理文本小部件,然后还将滚动条打包到同一窗口中。如果您向每个小部件询问其几何管理器(使用 chtext.wm_geometry() 和 chyscrollbar.wm_geometry()),则文本小部件将由 panedwindow 管理,而滚动条将由包几何管理器管理。这不是一个好的计划。实际发生的情况是滚动条覆盖了文本小部件的一部分,遮挡了小部件的边缘。您可以在输入一些文本并缩小 Pane 的大小时观察到这一点。一旦文本到达小部件的边缘,它就会默认开始换行。通过打包滚动条,文本与滚动条边缘碰撞时不会立即换行,而是仅在文本小部件的边缘碰到文本时才换行。要解决此问题,您应该将文本和滚动条放入一个框架中,并将该框架添加到 Pane 中。

我怀疑第二点是问题第二部分中缺少文本小部件的问题。您的文本小部件很可能只是遮挡了您的滚动条。如果您将这两个信息网格化或打包为一个框架,那么它们都将由同一个几何管理器管理,并且不会对每个信息分配多少空间产生混淆。

关于python - PanedWindow 与文本小部件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22756280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com