Tkinter Notebook小部件

时间:2019-03-24 14:29:03

标签: python tkinter ttk

我正在尝试使用ttk.Notebook小部件创建多个标签。我正在创建一个简单的多标签记事本。但我不知道如何处理笔记本小部件。但是,当我单击“保存”按钮时,它会覆盖由于我在self.tx.get("1.0","end-1c")中声明的所有选项卡文本区域。所有写入的文件都会根据最后一个文本更改其文本。感谢您的帮助


    #-*- coding: utf-8 -*-

    import tkinter.ttk as ttks
    from tkinter import LEFT,RIGHT,X,Y,BOTH
    class MainUI:
        def __init__(self,master):
            self.master = master

            self.nb = ttks.Notebook(self.master)
            self.nb.pack(fill='both',expand=1)

            self.name = ttks.Entry(self.master)
            self.name.pack()
            self.save_tab = ttks.Button(self.master,text="save",command=lambda:self.save_file()).pack()
            #tab1
            self.page1 = ttks.Frame(self.nb)
            self.txt = ttks.tkinter.Text(self.page1)
            self.txt.pack(fill='both',expand=1)
            self.nb.add(self.page1,text="tab1")

            self.page2 = ttks.Frame(self.nb)
            self.nb.add(self.page2,text="tab2")
            self.master.bind('',self.add_tabs)

        def add_tabs(self,event):
            self.page_name = ttks.Frame(self.nb)
            self.tx = ttks.tkinter.Text(self.page_name)
            self.tx.pack(fill=BOTH,expand=1)
            self.nb.add(self.page_name,text="pagename")

        def save_file(self):
            self.fname = self.name.get()
            self.txtinput = self.tx.get("1.0","end-1c")
            with open(self.fname,'w') as f:
                f.write(self.txtinput)

    if __name__ == "__main__":
        root = ttks.tkinter.Tk()
        root.title('Tabs>>')
        root.geometry('500x500')
        MainUI(root)
    root.mainloop()

enter image description here

enter image description here

实施以下代码后出现以下异常 enter image description here

1 个答案:

答案 0 :(得分:0)

add_tabs中,每次添加新标签时,您要替换self.tx的值。即您只记得上一次创建的文本小部件。您需要:

  • 存储您创建的所有文本小部件(即使用列表)
  • 有一些方法可以在前景中找到文本小部件,例如通过查看活动标签或重点突出的小部件。

__init__中,添加:

self.txs = [] # "s" suffix to discern list and elements

add_tabs中,使用:

tx = ttks.tkinter.Text(self.page_name)
self.txs.append(tx) # append to list
tx.pack(...)

save_file中,使用:

tab_index = self.nb.index(self.nb.select())
tx = self.txs[tab_index + 1] # may need to adjust depending on how much "static" tabs are in front
txtinput = self.tx.get("1.0", "end-1c")
# ...