Linux 中的 Tkinter 外观(主题)

Tkinter look (theme) in Linux

我知道 Tkinter 不是那么现代,不是那么酷,使用 PyQt 等可能更好

但是 Tkinter 在 Ubuntu (Linux) 中看起来不那么丑对我来说很有趣。看起来 python 的 Tkinter 的 brew 版本(在 OS X 中)使用内置主题编译并且看起来不错:

但是Ubuntu的Tkinter让我哭了:

我读过要获得好的主题,我需要使用 ttk,但我不知道具体如何。我的代码如下所示:

from Tkinter import *

class App():
  def __init__(self, master):
    frame = Frame(master)
    frame.pack()

    master.title("Just my example")
    self.label = Label(frame, text="Type very long text:")

    self.entry = Entry(frame)

    self.button = Button(frame,
                         text="Quit", fg="red", width=20,
                         command=frame.quit)


    self.slogan = Button(frame,
                         text="Hello", width=20,
                         command=self.write_slogan)

    self.label.grid(row=0, column=0)
    self.entry.grid(row=0, column=1)
    self.slogan.grid(row=1, column=0)
    self.button.grid(row=1, column=1)

  def write_slogan(self):
    print "Tkinter is easy to use!"

root = Tk()
app = App(root)
root.mainloop()

如何应用标准 ubuntu 主题或至少更好的主题?

谢谢。

来自 documentation 如果您想使用 ttk 而不是常规的 Tki 小部件:

from Tkinter import *
from ttk import *

several ttk widgets (Button, Checkbutton, Entry, Frame, Label, LabelFrame, Menubutton, PanedWindow, Radiobutton, Scale and Scrollbar) will automatically substitute for the Tk widgets.

您似乎没有使用 ttk 未涵盖的任何其他小部件。所以这应该有助于为您启用主题 ttk。如果您想查看可用的主题以及如何查看主题,请同时查看 here

可以使用以下命令查看 ttk 的所有可用主题:

$ python
>>> import ttk
>>> s=ttk.Style()
>>> s.theme_names()
('clam', 'alt', 'default', 'classic')

因此您可以在您的 Tkinter 版本中使用 'clam'、'alt'、'default'、'classic' 主题。

在尝试了所有这些之后,我认为最好的是 'clam'。您可以通过以下方式使用这个或任何其他方式:

from Tkinter import *
from ttk import *

class App():
  def __init__(self, master):
    frame = Frame(master)
    frame.pack()

    master.title("Just my example")
    self.label = Label(frame, text="Type very long text:")

    self.entry = Entry(frame)

    self.button = Button(frame,
                         text="Quit", width=15,
                         command=frame.quit)


    self.slogan = Button(frame,
                         text="Hello", width=15,
                         command=self.write_slogan)

    self.label.grid(row=0, column=0)
    self.entry.grid(row=0, column=1)
    self.slogan.grid(row=1, column=0, sticky='e')
    self.button.grid(row=1, column=1, sticky='e')

  def write_slogan(self):
    print "Tkinter is easy to use!"

root = Tk()
root.style = Style()
#('clam', 'alt', 'default', 'classic')
root.style.theme_use("clam")

app = App(root)
root.mainloop()

结果:

OS X 使用预编译主题 "aqua" 所以小部件看起来更好。

此外,Ttk 小部件不支持纯 Tkinter 支持的所有选项。

要使用 ttk,您必须导入它。

from tkinter import *
from tkinter import ttk

之后你应该像这样使用 tkinter 小部件-label=ttk.Label()button = ttk.Button()

ttkthemes 是一个有 25 个可用主题的模块,您可以轻松地将所有主题应用到 ttk 小部件中。

使用以下命令安装模块:-

命令:-

1.pip 在 cmd 或 powershell 中安装 ttkthemes(如果在 windows 中)

2.pip3 在终端中安装 ttkthemes(如果在 Linux 中)

并且将安装 ttkthemes 模块

这是一个例子:

# example from: https://ttkthemes.readthedocs.io/en/latest/example.html
from tkinter import ttk  # Normal Tkinter.* widgets are not themed!
from ttkthemes import ThemedTk
window = ThemedTk(theme="arc")# you can set any available theme. 
ttk.Button(window, text="Quit", command=window.destroy).pack()
window.mainloop()