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

时间:2018-09-02 18:51:06

标签: python python-2.7 tkinter

如果字段未填写,我想返回同一页面。

这是我到目前为止尝试过的:

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!")

使用此代码,我收到错误消息,但是单击“确定”后,将转到下一页。在单击“确定”以返回到同一页面(租户)以填充该字段之后,我希望这样做。 我该怎么做到?

1 个答案:

答案 0 :(得分:0)

找到了方法:

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)