Tkinter定制笔记本

时间:2019-04-15 13:34:30

标签: python tkinter styles ttk

我尝试使用ttk.style来制作自定义笔记本标签。.我在堆栈上搜索它,并在this answer中找到了解决方案,并且运行良好,然后我在程序中实现了它,但是一切顺利,但是我没有退出按钮..或者没有抛出任何错误..我无法解决问题..这是我的代码,感谢您的帮助。

import tkinter.ttk as ttks
from tkinter import X,Y,LEFT,RIGHT,BOTH,PhotoImage
from PIL import Image,ImageTk
class main:
    __initialized = False
    def __init__(self,master,**kwargs):
        self.master = master
        self._tb = []
        self._txt = []
        self._active = None
        if not self.__initialized:
           self.__initialize_custom_style()
           self.__inititialized = True
        self.nb = ttks.Notebook(self.master)
        self.nb.pack(fill=BOTH,expand=1)
        kwargs["style"] = "nb"

           self.frame =  ttks.Frame(self.nb)
           self.nb.add(self.frame,text="check")
           self.nb.bind("<ButtonPress-1>", self.on_close_press, True)
           self.nb.bind("<ButtonRelease-1>", self.on_close_release)

        def on_close_press(self,event):
           element = self.nb.identify(event.x, event.y)

           if "close" in element:
               index = self.nb.index("@%d,%d" % (event.x, event.y))
               self.nb.state(['pressed'])
               self._active = index

        def on_close_release(self, event):
            if not self.nb.instate(['pressed']):
               return

            element =  self.nb.identify(event.x, event.y)
            index = self.nb.index("@%d,%d" % (event.x, event.y))

            if "close" in element and self._active == index:
                self.nb.forget(index)
                self.nb.event_generate("<<NotebookTabClosed>>")

            self.nb.state(["!pressed"])
            self._active = None
        def __initialize_custom_style(self):
            style = ttks.Style()
            self.images = (

                PhotoImage("img_close", data='''                R0lGODlhCAAIAMIBAAAAADs7O4+Pj9nZ2Ts7Ozs7Ozs7Ozs7OyH+EUNyZWF0ZWQg    d2l0aCBHSU1QACH5BAEKAAQALAAAAAAIAAgAAAMVGDBEA0qNJyGw7AmxmuaZhWEU
            5kEJADs=
            '''),
                PhotoImage("img_closepressed", data='''
            R0lGODlhCAAIAMIEAAAAAOUqKv9mZtnZ2Ts7Ozs7Ozs7Ozs7OyH+EUNyZWF0ZWQg
            d2l0aCBHSU1QACH5BAEKAAQALAAAAAAIAAgAAAMVGDBEA0qNJyGw7AmxmuaZhWEU
            5kEJADs=
            '''),
                PhotoImage("img_closeactive", data='''
            R0lGODlhCAAIAMIEAAAAAP/SAP/bNNnZ2cbGxsbGxsbGxsbGxiH5BAEKAAQALAAA
            AAAIAAgAAAMVGDBEA0qNJyGw7AmxmuaZhWEU5kEJADs=
            ''')
        )

            style.element_create("close", "image", "img_close",
                        ("active", "pressed", "!disabled", "img_closepressed"),
                        ("active", "!disabled", "img_closeactive"), border=8, sticky='')
                style.layout("nb", [("nb.client", {"sticky": "nswe"})])
                style.layout("nb.Tab", [
        ("nb.tab", {
            "sticky": "nswe", 
            "children": [
                ("nb.padding", {
                    "side": "top", 
                    "sticky": "nswe",
                    "children": [
                        ("nb.focus", {
                            "side": "top", 
                            "sticky": "nswe",
                            "children": [
                                ("nb.label", {"side": "left", "sticky": ''}),
                                ("nb.close", {"side": "left", "sticky": ''}),
                                ]
                        })
                    ]
                })
            ]
        })
    ])

if __name__ =="__main__":
    root = ttks.tkinter.Tk()
    main(root)
    root.mainloop()


这是输出 enter image description here

0 个答案:

没有答案