Почему я не могу закрыть фрейм A Tkinter и создать другой?Python

Программы на Python
Ответить
Anonymous
 Почему я не могу закрыть фрейм A Tkinter и создать другой?

Сообщение Anonymous »

Я создал это приложение tkinter:

Код: Выделить всё

import os
import tkinter as tk
from tkinter import ttk

class SelectBodyScreen(ttk.Frame):

def __init__(self,root, lang, prod_text,test_text, on_next):
super().__init__(root)

self.lang = lang
self.prod_text_content = prod_text
self.test_text_content = test_text
self.root = root

self.build_ui()
self.on_next = on_next

def next_clicked(self):
selected_body = self.final_text.get("1.0", tk.END).strip()
self.on_next(selected_body)

def use_prod(self):
text = self.prod_text.get("1.0", tk.END)
self.final_text.delete("1.0", tk.END)
self.final_text.insert(tk.END, text)

def use_test(self):
text = self.test_text.get("1.0", tk.END)
self.final_text.delete("1.0", tk.END)
self.final_text.insert(tk.END, text)

def build_ui(self):
self.lang_label = ttk.Label(self.root, text="", font=("Arial", 14, "bold"))
self.lang_label.pack(pady=10)

frame = ttk.Frame(self.root)
frame.pack(fill="both", expand=True)

# PROD
ttk.Label(frame, text="Prod Body").grid(row=0, column=0)
self.prod_text = tk.Text(frame, height=15, width=50)
self.prod_text.grid(row=1, column=0, padx=5)
self.prod_text.insert("1.0",self.prod_text_content)

# TEST
ttk.Label(frame, text="Test Body").grid(row=0, column=1)
self.test_text = tk.Text(frame, height=15, width=50)
self.test_text.grid(row=1, column=1, padx=5)
self.test_text.insert("1.0",self.test_text_content)

# FINAL
ttk.Label(frame, text="Final Body").grid(row=2, column=0, columnspan=2)
self.final_text = tk.Text(frame, height=15, width=105)
self.final_text.grid(row=3, column=0, columnspan=2, pady=5)

button_frame = ttk.Frame(frame)
button_frame.grid(row=4, column=0, columnspan=2, pady=10)

ttk.Button(button_frame, text="Use Prod",
command=self.use_prod).pack(side="left", padx=5)

ttk.Button(button_frame, text="Use Test",
command=self.use_test).pack(side="left", padx=5)

ttk.Button(button_frame, text="Next",
command=self.next_clicked).pack(side="right", padx=5)

class TemplateWizard:

def __init__(self, root, folder, template_name_without_env, lang_order, aggregate):

self.root = root
self.folder = folder
self.template_name_without_env = template_name_without_env
self.lang_order = lang_order
self.aggregate = aggregate

self.lang_index = 0
self.current_screen = None

self.root.title("Template Wizard")
self.root.geometry("1100x800")

self.final = {
"body":{
"el":"",
"en":""
},
"buttons":[]
}

self.show_next_language()

def show_next_language(self):

if self.lang_index >= len(self.lang_order):
print("Wizard finished")
print("Final selections:", self.aggregate.get("final", {}))
self.root.destroy()
return

lang = self.lang_order[self.lang_index]

prod_text = self.aggregate[f"prod_{self.template_name_without_env}"][lang]['body']
test_text = self.aggregate[f"test_{self.template_name_without_env}"][lang]['body']

self.current_screen = SelectBodyScreen(
root=self.root,
lang=lang,
prod_text=prod_text,
test_text=test_text,
on_next=self.on_screen_next
)

self.current_screen.pack(fill="both", expand=True)

def on_screen_next(self, selected_body):

lang = self.lang_order[self.lang_index]

self.final['body'][lang]=selected_body

print(selected_body)

# # Store selected body
# if "final"  not in self.aggregate:
#     self.aggregate["final"] = {}

# self.aggregate["final"][lang] = selected_body

self.lang_index += 1
self.current_screen.destroy()

self.show_next_language()
Я реализую мастер, который позволяет мне выбрать значение из агрегата.
Моя проблема заключается в том, что когда я нажимаю кнопку «Далее», я получаю следующее:
Изображение

И кадр не уничтожается правильно. Как я могу это исправить?

Подробнее здесь: https://stackoverflow.com/questions/799 ... nother-one
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»