之前更新帧我试图编写一个小应用程序,从数据库搜索客户的详细信息,并更新他们使用不同的帧输入各种信息的catagorys的方面。当每一帧信息输入完成时,我想返回到一个简历框架来查看并随后存储完整的信息。我的问题是我无法通过控制器类中的字典存储信息来更新简历框架。 frame.update()似乎不起作用。什么是实现这一目标的正确方法? 感谢您的帮助。 这里是代码的简化版本;更新帧frame.tkraise()
import tkinter as tk
from PIL import ImageTk
from tkinter import ttk
class OrdersApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
tk.Tk.wm_title(self, "2017 Orders")
tk.Tk.wm_geometry(self, "1024x690+40+60")
windowbox = tk.Frame(self)
windowbox.pack(side="top", fill="both", expand=True)
windowbox.grid_rowconfigure(0, weight=1)
windowbox.grid_columnconfigure(0, weight=1)
self.shared_data = {
"familyname": tk.StringVar(),
}
self.frames = {}
for F in (Home, CustomerSelect):
frame = F(windowbox, self)
self.frames[F] = frame
frame.configure(background="#dcc8af")
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(Home)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
def search_by_number(self, searchnumber, cont):
# cont is the frame to be called after function run
print(searchnumber) # to check input
# here data grabbed from db using user input phone number (now hard coded)
row = 'chris'
self.shared_data["familyname"].set(row)
print(self.shared_data["familyname"].get() + ' SBN has run')
# the data is stored successfult to the controler dict
frame = self.frames[cont]
frame.update()
frame.tkraise()
# this raises cont(customerdetails) but the new information from shared_data is not updated
class Home(tk.Frame):
def __init__(self, parent, controller):
self.controller = controller
tk.Frame.__init__(self, parent)
button1 = tk.Button(self, text="Search", compound=tk.CENTER, borderwidth=3, relief="raised",
command=lambda: controller.search_by_number(phonenumber.get(), CustomerSelect))
image3 = ImageTk.PhotoImage(file="images/buttonRed.gif")
button1.config(image=image3, width=64, height=40)
button1.image = image3
button1.grid(row=0, column=0)
framelabel = tk.Label(self, text="Home Frame")
framelabel.grid(row=0, column=1)
phonelabel = ttk.Label(self, text="phone number", font=("Arial", 20), background='#dcc8af')
phonelabel.grid(row=2, column=1)
phonenumber = ttk.Entry(self, width=30, font=("Arial", 20))
phonenumber.insert(0, "0468777904")
phonenumber.grid(row=2, column=2, padx=16, pady=16)
class CustomerSelect(tk.Frame):
def __init__(self, parent, controller):
self.controller = controller
tk.Frame.__init__(self, parent)
framelabel = tk.Label(self, text="Customer select Frame")
framelabel.grid(row=0, column=3)
familynamelabel = ttk.Label(self, text="Family name", font=("Arial", 10), background='#dcc8af')
familynamelabel.grid(row=1, column=2)
familyname = ttk.Entry(self, width=20, font=("Arial", 10))
fn = self.controller.shared_data["familyname"].get()
familyname.insert(0, fn)
familyname.grid(row=1, column=3, padx=4, pady=8)
app = OrdersApp()
app.mainloop()
您好,请提供[最小,完整和可验证示例](https://stackoverflow.com/help/mcve)。您提供了比检查问题所需更多的代码。您还需要提供您的导入,现在您正在调用您的课程,因为这些课程与确保您的代码不会丢失任何内容相关。 –
感谢您的提示 - 我很缺乏经验(和老)我跟着链接,并希望更好地刺穿代码。它运行没有错误,但familyname ttk Entry小部件似乎没有收到数据? – user3617217