Как добавить темы? - PullRequest
       22

Как добавить темы?

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

Я недавно поднял python и работаю над проектом под названием «ToDoList.py». Он закончен, но я хочу добавить кнопку, чтобы изменить тему графического интерфейса с помощью tkinter / ttk, но она не работает.

Это ошибка:

Traceback (most recent call last):
  File "todolist.py", line 64, in <module>
    lbl_title = Label(root, text="ToDoList", bg="white")
  File "C:\Users\Sam\AppData\Local\Programs\Python\Python37-32\lib\tkinter\ttk.py", line 761, in __init__
    Widget.__init__(self, master, "ttk::label", kw)
  File "C:\Users\Sam\AppData\Local\Programs\Python\Python37-32\lib\tkinter\ttk.py", line 559, in __init__
    tkinter.Widget.__init__(self, master, widgetname, kw=kw)
  File "C:\Users\Sam\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 2296, in __init__
    (widgetName, self._w) + extra + self._options(cnf))
_tkinter.TclError: unknown option "-bg"

Я не понимаю, почему эта ошибка возможна, поскольку я еще не настроил виджеты

from tkinter import *

from tkinter import ttk

from tkinter.ttk import *

from ttkthemes import themed_tk as tk

import random

import tkinter.messagebox

#--------root style
root = Tk()
#--------root backgroud
root.configure(bg="white")
#--------root title
root.title("Reminder")
#--------root size
root.geometry("225x300")
#--------create empty list
tasks = []
#--------fuction
def darkmd():
    root.get_themes()
    root.set_theme("equilux")
#--------command
lbl_title = Label(root, text="ToDoList", bg="white")
lbl_title.grid(row=0, column=0)

lbl_display = Label(root, text="", fg="black", bg="white")
lbl_display.grid(row=0, column=1)

txt_input = Entry(root, width=20, fg="black", bg="white")
txt_input.grid(row=1, column=1)

bt_add_task = Button(root, text="Add Task", fg="black", bg="white",         command = add_task)
bt_add_task.grid(row=1, column=0)

bt_del_all = Button(root, text="Del all", fg="black", bg="white", command = del_all)
bt_del_all.grid(row=2, column=0)

bt_del_one= Button(root, text="Del", fg="black", bg="white", command = del_one)
bt_del_one.grid(row=3, column=0)

bt_sort_asc = Button(root, text="Sort (ASC)", fg="black", bg="white", command = sort_asc)
bt_sort_asc.grid(row=4, column=0)

bt_sort_desc = Button(root, text="Sort (DESC)", fg="black", bg="white", command = sort_desc)
bt_sort_desc.grid(row=5, column=0)

bt_total_task = Button(root, text="Num Of Task", fg="black", bg="white", command = total_task)
bt_total_task.grid(row=6, column=0)

bt_darkmd = Button(root, text="Darkmode", fg="black", bg="white", command = darkmd)
bt_darkmd.grid(row=7, column=0)

lb_tasks = Listbox(root,fg="black", bg="white")
lb_tasks.grid(row=2, column=1, rowspan=9)

#--------main
root.mainloop()

1 Ответ

0 голосов
/ 18 февраля 2019

Комментарий : Как использовать: ttkthemes

Для использования ttkthemes измените на следующее:
Нет style.theme_use(..., так как это уже сделано в __init__(....

from ttkthemes import ThemedTk

class App(ThemedTk):
    def __init__(self):
        super().__init__("equilux")

        # ATTENTION!!
        # The following could fail as i couldn't test with `ThemedTk`
        # ATTENTION!!
        style = ttk.Style(self)
        style.configure("TLabel", background="white")

Вопрос : Как добавить темы?

Сначала вы должны понять, не to смешивать виджеты tkinter и tkinter.ttk неконтролируемым образом. Только стили tkinter.ttk могут быть стилизованы с использованием theme и style.


  1. Используйте только следующие общие import операторы

    import tkinter as tk
    import tkinter.ttk as ttk
    
  2. Для создания экземпляра ttk используйте:

    Примечание : Вы не можете использовать bg= в виджете ttk!

    lbl_title = ttk.Label(root, text="ToDoList")
    
  3. Использование в широком диапазоне приложений:

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

    class App(tk.Tk):
        def __init__(self):
            super().__init__()
    
            style = ttk.Style(self)
            style.theme_use('clam')
            style.configure("TLabel", background="white")
    
            self.title("Tkinter Style")
            self.geometry("225x300")
    
            lbl_title = ttk.Label(self, text="ToDoList")
            lbl_title.grid(row=0, column=0)
    
    
    if __name__ == "__main__":
        App().mainloop()
    

Протестировано на Python: 3,5

...