简体   繁体   English

如果出错,返回同一个窗口 Python Tkinter 2.7

[英]If error, return to the same window Python Tkinter 2.7

I would like to return to the same page if a field is not completed.如果某个字段未完成,我想返回到同一页面。

Here is what I have tried so far:这是我迄今为止尝试过的:

class Tenants(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self,master)
        self.tenant_entries=[]
        self.create_widgets(master)

    def create_widgets(self,master):
        label = tk.Label(self, text="Insert the name of the tenants")
        start_button = tk.Button(self, text="Return to start page", command=lambda: master.switch_frame(StartPage))
        new_tenant_button = tk.Button(self, text="Add tenant", command=self.add_tenant)
        new_tenant_button.bind("<Return>", self.add_tenant)
        new_tenant_button.grid(row=len(self.master.tenants), column=3, padx=4, pady=6, sticky="W")
        next_button=tk.Button(self, text="Next", command=lambda:[master.switch_frame(Networks)] and self.tenants())
        next_button.grid(row=1500, column=5,padx=4, pady=6, sticky="W")
        label.pack(side="top", fill="x", pady=10)
        start_button.pack()
        new_tenant_button.pack()
        next_button.pack()
        for index, tenant in enumerate(self.master.tenants):
            self.render_tenant_field(tenant, index)

    def add_tenant(self):
        self.master.tenants.append({'variable': tk.StringVar(self.master)})
        self.master.switch_frame(Tenants)

    def render_tenant_field(self, tenant, index):
        entry_field = tk.Entry(self, textvariable=tenant['variable'])
        entry_field.grid(row=index, column=0, columnspan=2, padx=4, pady=6, sticky="NEWS")
        entry_field.pack()
        self.tenant_entries.append(tenant['variable'])

    def tenants(self):
        with open("/home/dante/tenants.yml", "w") as f:
          if self.tenant_entries:   
             f.write("--- #" + "\n")
             f.write("clouds:" + "\n")
             for ent in self.tenant_entries:
                 value=ent.get()
                 if value:
                    f.write("   "+value+":"+ "\n")
                    f.write("      username: admin"+"\n")

          else: 
             tkMessageBox.showerror("tk", "No tenants defined!")

With this code, I am getting the error message, but after clicking OK, is going to the next page.使用此代码,我收到错误消息,但单击“确定”后,将转到下一页。 I would like that after clicking OK to return to the same page(Tenants) to fill that field.我希望在单击“确定”返回同一页面(租户)以填写该字段后。 How I can accomplish this?我怎么能做到这一点?

Found the way:找到了方法:

class Tenants(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self,master)
        self.tenant_entries=[]
        self.create_widgets(master)

    def create_widgets(self,master):
        label = tk.Label(self, text="Insert the name of the tenants")
        start_button = tk.Button(self, text="Return to start page", command=lambda: master.switch_frame(StartPage))
        new_tenant_button = tk.Button(self, text="Add tenant", command=self.add_tenant)
        new_tenant_button.bind("<Return>", self.add_tenant)
        new_tenant_button.grid(row=len(self.master.tenants), column=3, padx=4, pady=6, sticky="W")
        next_button=tk.Button(self, text="Next", command=lambda:[master.switch_frame(Networks)] and self.tenants())
        next_button.grid(row=1500, column=5,padx=4, pady=6, sticky="W")
        label.pack(side="top", fill="x", pady=10)
        start_button.pack()
        new_tenant_button.pack()
        next_button.pack()
        for index, tenant in enumerate(self.master.tenants):
            self.render_tenant_field(tenant, index)

    def add_tenant(self):
        self.master.tenants.append({'variable': tk.StringVar(self.master)})
        self.master.switch_frame(Tenants)

    def render_tenant_field(self, tenant, index):
        entry_field = tk.Entry(self, textvariable=tenant['variable'])
        entry_field.grid(row=index, column=0, columnspan=2, padx=4, pady=6, sticky="NEWS")
        entry_field.pack()
        self.tenant_entries.append(tenant['variable'])

    def tenants(self):
        with open("/home/dante/tenants.yml", "w") as f:
          if self.tenant_entries:   
             f.write("--- #" + "\n")
             f.write("clouds:" + "\n")
             for ent in self.tenant_entries:
                 value=ent.get()
                 if value:
                    f.write("   "+value+":"+ "\n")
                    f.write("      username: admin"+"\n")

          else: 
             tkMessageBox.showerror("tk", "No tenants defined!") 
             self.master.switch_frame(Tenants)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM