Если ошибка, вернитесь в то же окно Python Tkinter 2.7 - PullRequest
0 голосов
/ 02 сентября 2018

Я хотел бы вернуться на ту же страницу, если поле не заполнено.

Вот что я пробовал до сих пор:

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

С этим кодом я получаю сообщение об ошибке, но после нажатия кнопки ОК переходит на следующую страницу. Я хотел бы, чтобы после нажатия OK вернуться на ту же страницу (Арендаторы), чтобы заполнить это поле. Как мне это сделать?

1 Ответ

0 голосов
/ 02 сентября 2018

Нашел путь:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...