Tkinter Notebook小部件

问题描述 投票:0回答:1

我正在尝试使用ttk.Notebook小部件创建多个选项卡。我正在创建一个简单的多标签记事本。但我不知道如何处理NoteBook小部件。但是当我点击“保存”按钮时,它会覆盖所有标签文本区域,因为我在那里声明了self.tx.get("1.0","end-1c").all书面文件根据最后文本更改了文本。谢谢你的帮助


    #-*- 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

python tkinter ttk
1个回答
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")
# ...
© www.soinside.com 2019 - 2024. All rights reserved.