как сохранить тему tkinter при открытии верхнего уровня с другой темой - PullRequest
0 голосов
/ 17 января 2019

У меня есть tkinter root window и toplevel window с разными темами, но когда я открываю toplevel window, он меняет root window на темы, установленные для toplevel window

Я хочу сохранить темы, установленные для каждого окна. Это приводит к ошибке _tkinter.TclError: Theme MyStyle already exists, когда я закрываю окно верхнего уровня и открываю его снова.

import tkinter as tk
import tkinter.ttk as ttk



def test2():
    rt1 = tk.Toplevel()
    rt1.geometry("500x500")

    s = ttk.Style()
    s.theme_create("MyStyle", parent="alt", settings={
    "TNotebook": {"configure": {"tabmargins": [2, 5, 2, 0]}},
    "TNotebook.Tab": {"configure": {"padding": [50, 8] }}})

    s.theme_use("MyStyle")

    notebook = ttk.Notebook(rt1)

    f1 = tk.Frame(notebook, width=200, height=200)
    f2 = tk.Frame(notebook, width=200, height=200)

    notebook.add(f1, text="tab 1")
    notebook.add(f2, text="tab 2")

    notebook.grid(row=0, column=0, sticky="nw")


root = tk.Tk()
root.geometry("500x500")


tree = ttk.Treeview(root, column=("col1", "col2"))
tree.insert("", tk.END, values=("deee", "fjfj","fjjf", "jfjfjf"))
tree.pack()

b3 = tk.Button(root, text="new", command=test2)
b3.place(x=200, y=200)


root.mainloop()

1 Ответ

0 голосов
/ 17 января 2019

Прямо сейчас вы пытаетесь создать стиль при каждом нажатии кнопки, и это является причиной проблемы.

Вместо этого просто переместите создание темы в глобальное пространство имен, где его можно создать один раз, и это больше не будет проблемой.

import tkinter as tk
import tkinter.ttk as ttk


def test2():
    rt1 = tk.Toplevel()
    rt1.geometry("500x500")
    notebook = ttk.Notebook(rt1)
    f1 = tk.Frame(notebook, width=200, height=200)
    f2 = tk.Frame(notebook, width=200, height=200)
    notebook.add(f1, text="tab 1")
    notebook.add(f2, text="tab 2")
    notebook.grid(row=0, column=0, sticky="nw")

root = tk.Tk()
root.geometry("500x500")
tree = ttk.Treeview(root, column=("col1", "col2"))
tree.insert("", tk.END, values=("deee", "fjfj","fjjf", "jfjfjf"))
tree.pack()

s = ttk.Style()
s.theme_create("MyStyle", parent="alt", settings={
"TNotebook": {"configure": {"tabmargins": [2, 5, 2, 0]}},
"TNotebook.Tab": {"configure": {"padding": [50, 8] }}})
s.theme_use("MyStyle")

b3 = tk.Button(root, text="new", command=test2)
b3.place(x=200, y=200)
root.mainloop()
...