【问题标题】:ttk creating and using a custom themettk 创建和使用自定义主题
【发布时间】:2016-02-16 17:48:08
【问题描述】:

我正在尝试在我的程序中加入可自定义的主题选择。我一直在参考这个指南:http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/ttk-themes.html,但我迷路了。

这是我一直用来解决这个问题的示例代码。我正确地创建了一个新主题“阴影”,但下一部分我正在努力。让我们保持简单,在“阴影”主题中说,我想将框架背景更改为黑色,将按钮背景更改为海军蓝,将按钮前景更改为白色。

我该怎么做?

from tkinter import *
from tkinter import ttk

class Main:
    def __init__(self, master):
        self.master = master
        self.main_button = ttk.Button(self.master, text = 'New', command = self.new_window)
        self.main_button.grid()

    def new_window(self):
        pop_up = Top(self.master)

class Top:
    def __init__(self, master):
        pop_up = self.pop_up = Toplevel(master)
        self.pop_up_frame = ttk.Frame(pop_up, height = 100, width = 100)
        self.pop_up_frame.grid(sticky = E+W+S+N)
        self.s = ttk.Style()
        self.s.theme_create('shadow', parent = 'default')

        print(self.s.theme_names())

        self.c1_button = ttk.Button(pop_up, text = 'Default', command = self.get_default)
        self.c2_button = ttk.Button(pop_up, text = 'Shadow', command = self.get_shadow)

        self.c1_button.grid()
        self.c2_button.grid()    

    def get_default(self):
        self.s.theme_use('default')

    def get_shadow(self):
        self.s.theme_use('shadow')


root = Tk()

app = Main(root)

root.mainloop()

一如既往,谢谢!

【问题讨论】:

    标签: tkinter themes python-3.3 ttk


    【解决方案1】:

    这太难了。

    这是其他任何人试图解决这个问题的解决方案:

    from tkinter import *
    from tkinter import ttk
    
    class Main:
        def __init__(self, master):
            self.master = master
            self.main_button = ttk.Button(self.master, text = 'New', command = self.new_window)
            self.main_button.grid()
    
        def new_window(self):
            pop_up = Top(self.master)
    
    class Top:
        def __init__(self, master):
            pop_up = self.pop_up = Toplevel(master)
            self.pop_up_frame = ttk.Frame(pop_up, height = 100, width = 100)
            self.pop_up_frame.grid(sticky = E+W+S+N)
            self.s = ttk.Style()
            self.s.theme_create('shadow', parent = 'default')
    
            print(self.s.theme_names())
    
            self.c1_button = ttk.Button(pop_up, text = 'Default', command = self.get_default)
            self.c2_button = ttk.Button(pop_up, text = 'Vista', command = self.get_shadow)
    
            self.c1_button.grid()
            self.c2_button.grid()
    
        def get_default(self):
            self.s.theme_use('default')
    
        def get_shadow(self):
            self.s.theme_use('vista')
            self.s.configure('TButton', foreground = 'white', background = 'blue')
            self.s.configure('TFrame', background = 'black')
    
    
    
    root = Tk()
    
    app = Main(root)
    
    root.mainloop()
    

    【讨论】:

      【解决方案2】:

      为简化Gregory6106's answer,您可以使用.configure() 修改您当前的主题主题。

      from tkinter import *
      from tkinter import ttk
      
      class MainPage(ttk.Frame):
          def __init__(self, master):
              ttk.Frame.__init__(self, master)
              self.main_label = ttk.Label(self, text="Pointless Text")
              self.main_button = ttk.Button(self, text="Pointless Button")
              self.main_label.pack(padx=5, pady=5)
              self.main_button.pack(padx=5, pady=5)
      
              # Configure custom theme
              self.s = ttk.Style()
              self.s.configure('TLabel', foreground='red', background='grey')
              self.s.configure('TButton', foreground='white', background='blue')
              self.s.configure('TFrame', background='black')
      
      
      root = Tk()
      app_frame = MainPage(root)
      app_frame.pack()
      root.mainloop()
      

      注意:此解决方案通过配置预先存在的主题而不是创建新主题来工作。因此,如果您计划在运行时切换回原始主题,这可能不起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-30
        • 1970-01-01
        • 1970-01-01
        • 2011-10-04
        • 2018-03-18
        • 2018-05-09
        • 2022-01-07
        • 2019-09-06
        相关资源
        最近更新 更多