试图为tkinter gui提供皮肤类型功能

时间:2017-02-26 19:02:50

标签: python tkinter themes skin

我希望能够在GUI中使用反色(例如在黑色上使用浅绿色),以及整体增加使用的字体大小。

我确实喜欢ttk在tkinter上提供的一些额外功能,但似乎信息没有整体层次结构。每个小部件都有一个完整的每个主题的外观/行为定义。

因此看起来我需要获取与我的应用程序使用的每个控件相关联的样式,并为每种样式单独更改字体大小,前景和背景。这真的是这样做的方法,还是有更好的解决方案来解决这个问题?

至少对答案here提出了大小部分的提示。

this页面的底部,提到了一个隐藏的' ttk中的root样式。请注意,并非所有样式都适当地从此处继承叹息

因此,这是一个非常小的应用程序,可动态更改某些字体大小。大小开始时为负数,初始行为很奇怪,但一旦数字为正,行为就可以了。

#!/usr/bin/python3
#from https://stackoverflow.com/questions/12018540/python3-how-to-dynamically-resize-button-text-in-tkinter-ttk?rq=1
from tkinter import Tk, StringVar, font
from tkinter.ttk import Frame, Button, Label, Entry, Style

class ButtonApp(Tk):
    """Container for the buttons."""

    def __init__(self):
        super().__init__()
        self.createWidgets()

        # grab the current theme
        self.theme = Style()

    def createWidgets(self):
        """Make the widgets."""

        self.plusbut = Button(self, text='+font+')
        self.plusbut.grid(column=0, row=0, sticky='nsew')
        self.plusbut['command'] = self.fontup
        self.minusbut = Button(self, text='-font-')
        self.minusbut.grid(column=1, row=0, sticky='nsew')
        self.minusbut['command'] = self.fontdn
        self.alabel = Label(self, text='Label 42:')
        self.alabel.grid(column=0, row=1)
        self.blabel = Label(self, text='Label 43:')
        self.blabel.grid(column=0, row=2)
        self.sstr = StringVar()
        self.sstr.set("here is an input field")
        self.entfld = Entry(self,textvariable=self.sstr)
        self.entfld.grid(column=1, row=1)

    def fontup(self):
        self.changefont(1)

    def fontdn(self):
        self.changefont(-1)

    def changefont(self, change):
        fn=self.theme.lookup('.','font')
        df=font.nametofont(fn)
        sz=df.cget('size')
        df.configure(size=sz+change)
        newtext = "font size now %d" % (sz+change)
        self.alabel.configure(text=newtext)
        self.blabel.configure(text="actual font size is %d" % df.actual('size'))

root = ButtonApp()
root.title('playing with styles')
root.mainloop()

0 个答案:

没有答案