初始化后如何在 Tkinter 中设置窗格窗口小部件内小部件的宽度/高度?

问题描述 投票:0回答:2

我正在尝试在 Tkinter GUI 中创建保存/恢复功能,但在恢复窗格窗口中小部件的宽度/高度时遇到问题。我尝试过 .place() 和 .config,但是每个小部件周围的可调整大小的窗口消失了,我无法再调整每个小部件的大小。

示例代码:

from tkinter import *
from tkinter.ttk import *

root = Tk()
pw = PanedWindow(root)

text1 = Text(pw)
pw.add(text1)

text2 = Text(pw)
pw.add(text2)

entry1 = Entry(pw)
pw.add(entry1)

python python-3.x tkinter
2个回答
0
投票

我不确定 PaneWindows 是否有特殊意义。 您可能至少需要 2 个配对。 此外,一些虚假内容有助于小部件有一些可以掌握的东西。

这是我的小工具。

from tkinter import *
from tkinter.ttk import *

root = Tk()
pw = PanedWindow(root)
pw.pack(fill=BOTH, expand=1)
text1 = Text(pw)
text1.insert(INSERT, "text1 .....")
pw.add(text1)

pw2 = PanedWindow(pw, orient=VERTICAL)
pw.add(pw2)
text2 = Text(pw)
text2.insert(INSERT, "text2 .....")
pw2.add(text2)


entry1 = Entry(pw)
pw.add(entry1)

enter image description here

Entry1 错误,因为它是第一个窗格的父级。 所有 3 个窗口都应由第 4 个窗口作为父窗口。


0
投票

您可以使用

pw.sashpos(i)
保存窗扇的位置。像这样的东西:

def save():
    sash_pos = []
    i = 0
    while True:
        try:
            sash_pos.append(pw.sashpos(i))
            i += 1
        except TclError:
            break

    with open("sash_pos.json", "w") as f:
        json.dump(sash_pos, f)

    root.destroy()

然后用

pw.sashpos(i, pos)
加载它们,如下所示:

def load():
    try:
        with open("sash_pos.json", "r") as f:
            sash_pos = json.load(f)
        print(sash_pos)
        for i, pos in enumerate(sash_pos):
            pw.sashpos(i, pos)
    except FileNotFoundError:
        pass

在调用

load
函数之前,请确保窗口已完全加载。像
pw.after(100, load)
这样的东西对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.