我想保存並加載我的GUI。保存並加載GUI-tkinter
我做了一個GUI,我希望當我點擊保存按鈕。
它應該將GUI保存在一些數據blob中,當我點擊加載按鈕時,它會再次加載相同的GUI。
我的GUI有各種文本小部件,下拉選項菜單。 我是python的新手,所以有人可以幫我解決這個問題嗎?
我也嘗試過泡菜模塊。
我想保存並加載我的GUI。保存並加載GUI-tkinter
我做了一個GUI,我希望當我點擊保存按鈕。
它應該將GUI保存在一些數據blob中,當我點擊加載按鈕時,它會再次加載相同的GUI。
我的GUI有各種文本小部件,下拉選項菜單。 我是python的新手,所以有人可以幫我解決這個問題嗎?
我也嘗試過泡菜模塊。
你不能做自己想做的事,而不去做自己的工作。您需要編寫一個函數來收集所需的所有數據以恢復GUI,然後將其保存到磁盤。然後,當GUI啓動時,您可以讀取數據並重新配置小部件以包含此數據。
Tkinter爲您提供了幾乎所有需要的功能,但您必須自己完成所有工作。酸洗GUI不起作用。
這是一個人爲的例子。在彈出的窗口中輸入幾個表達式。注意它們被添加到組合框中。當您退出時,當前表達式,保存的表達式和當前值全部保存。下次啓動GUI時,這些值將被恢復。
import Tkinter as tk
import ttk
import pickle
FILENAME = "save.pickle"
class Example(tk.Frame):
def __init__(self, parent):
self.create_widgets(parent)
self.restore_state()
def create_widgets(self, parent):
tk.Frame.__init__(self, parent, borderwidth=9,relief="flat")
self.previous_values = []
l1 = tk.Label(self, text="Enter a mathematical expression:", anchor="w")
l2 = tk.Label(self, text="Result:", anchor="w")
self.expressionVar = tk.StringVar()
self.expressionEntry = ttk.Combobox(self, textvariable=self.expressionVar, values=("No recent values",))
self.resultLabel = tk.Label(self, borderwidth=2, relief="groove", width=1)
self.goButton = tk.Button(self, text="Calculate!", command=self.calculate)
l1.pack(side="top", fill="x")
self.expressionEntry.pack(side="top", fill="x",padx = (12, 0))
l2.pack(side="top", fill="x")
self.resultLabel.pack(side="top", fill="x", padx = (12, 0), pady=4)
self.goButton.pack(side="bottom", anchor="e", pady=4)
self.expressionEntry.bind("<Return>", self.calculate)
# this binding saves the state of the GUI, so it can be restored later
root.wm_protocol("WM_DELETE_WINDOW", self.save_state)
def calculate(self, event=None):
expression = self.expressionVar.get()
try:
result = "%s = %s" % (expression, eval(expression))
self.previous_values.append(expression)
self.previous_values = self.previous_values[-8:]
self.expressionVar.set("")
self.expressionEntry.configure(values=self.previous_values)
except:
result = "invalid expression"
self.resultLabel.configure(text=str(result))
def save_state(self):
try:
data = {
"previous": self.previous_values,
"expression": self.expressionVar.get(),
"result": self.resultLabel.cget("text"),
}
with open(FILENAME, "w") as f:
pickle.dump(data, f)
except Exception as e:
print "error saving state:", str(e)
root.destroy()
def restore_state(self):
try:
with open(FILENAME, "r") as f:
data = pickle.load(f)
self.previous_values = data["previous"]
self.expressionEntry.configure(values=self.previous_values)
self.expressionVar.set(data["expression"])
self.resultLabel.configure(text=data["result"])
except Exception as e:
print "error loading saved state:", str(e)
if __name__ == "__main__":
root = tk.Tk()
Example(root).pack(fill="both", expand=True)
root.mainloop()
給出的示例不起作用。它不保存狀態,並給出了error-- 錯誤加載保存的狀態:「STR」不支持緩衝區接口
我的GUI有4類和每個類都有被環6-7的功能(稱爲一次又一次)。每個功能都有小部件。那麼,你能建議我如何將它保存到磁盤 – user5517005
什麼是pytkgen? https://github.com/tmetsch/pytkgen – user5517005
@ user5517005:不,我不能。該解決方案對您的應用程序非常具體。 –