Tkinter look (theme) in Linux

删除回忆录丶 提交于 2019-12-04 08:00:54

问题


I know that Tkinter is not so modern, not so cool and maybe better to use PyQt or etc.

But it is interesting for me can Tkinter looks not so ugly in Ubuntu (Linux). Looks that brew version (in OS X) of python's Tkinter compiled with built-in theme and looks good:

But Ubuntu's Tkinter makes me cry:

I've read that for good theme I need to use ttk, but I dont know exactly how. My code looks as follow:

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()

How to apply standard ubuntu theme or at least better theme?

Thanks.


回答1:


All available themes of ttk can be seen with such commands:

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

So you can use 'clam', 'alt', 'default', 'classic' themes with your version of Tkinter.

After trying all of them I think the best one is 'clam'. You can use this one or any other in following way:

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()

Result:

OS X uses precompiled theme "aqua" so widgets are looking better.

Also Ttk widgets do not support all option which pure Tkinter does.




回答2:


To use ttk you have to import it.

from tkinter import *
from tkinter import ttk

After that you should use tkinter widgets like this-label=ttk.Label() or button = ttk.Button()




回答3:


From documentation if you want to use ttk instead of regular Tki widgets:

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.

You dont seem to use any other widget not covered by ttk. So this should help and enable themed ttk for you. If you want to check what themes are avaliable and how to check a theme, have a look here as well.



来源:https://stackoverflow.com/questions/28551948/tkinter-look-theme-in-linux

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!