我正在尝试在 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)
我不确定 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)
Entry1 错误,因为它是第一个窗格的父级。 所有 3 个窗口都应由第 4 个窗口作为父窗口。
您可以使用
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)
这样的东西对我有用。