我正在尝试编写一个小应用程序,从数据库中搜索客户的详细信息,并使用不同的框架来更新客户的各个方面,以输入不同类别的信息。由于每一帧的信息输入是完整的,我想返回到一个恢复帧,以查看和随后存储完整的信息。我的问题是,我不能让resume框架更新我存储在controller类中dict中的信息。帧更新()似乎不起作用。正确的方法是什么? 谢谢你的帮助。 以下是代码的简化版本
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()
除了你的代码还有很多问题。这是一个简单的示例,使用两个类,演示了如何通过调用第二个类中的update函数来更新其中一个类中的条目。请注意,类的一部分用途是包含与代码的特定函数相关的所有方法,也就是说,在这个简单的示例中,类创建它使用的小部件并更新其条目小部件。在
相关问题 更多 >
编程相关推荐